qt折线图只显示两条线
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt折线图只显示两条线相关的知识,希望对你有一定的参考价值。
你这个图标是要画2个X轴、2个Y轴吧,将A线设置成次坐标轴,B线为主坐标轴即可实现!1、点excel工具栏【图标向导】按钮,选择【双折线图】;在弹出的对话框中点【系列】,添加2个系列A、B,分别对应添加值、X轴标签的数据;
2、然后鼠标双击图标上的直线A,点【坐标轴】下选择【次坐标轴】,双击图标空白处,选择【图标选项】,将次坐标轴前打勾;
3、然后分别设置折线A、B的横轴范围,右击将折线A横坐标选择【清除】,以上即可完成! 参考技术A 新建ui工程,并添加MainWindow私有变量:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QChartView>
#include <QChart>
#include <QLineSeries>
#include <QValueAxis>
QT_CHARTS_USE_NAMESPACE
namespace Ui
class MainWindow;
class MainWindow : public QMainWindow
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QChart *chart;//非必要(QCharView实体中自带一个QChart实体)
QLineSeries *series_sin, *series_cos;
QValueAxis *axis_x_sin, *axis_y_sin, *axis_x_cos, *axis_y_cos;
;
#endif // MAINWINDOW_H
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
chart(new QChart),//或者不用new,直接指向ui->graphicsView->chart()也行
series_sin(new QLineSeries),//sin曲线的数据点
series_cos(new QLineSeries),//cos曲线的数据点
axis_x_sin(new QValueAxis),//sin的X轴
axis_y_sin(new QValueAxis),//sin的Y轴
axis_x_cos(new QValueAxis),//cos的X轴
axis_y_cos(new QValueAxis)//cos的Y轴
ui->setupUi(this);
ui->graphicsView->setChar 参考技术B 折线图只显示两条线,新建ui工程,并添加MainWindow私有变量#ifndef MAINWINDOW_H
#define MAINWINDOW_H
Altair 等值线图,基于折线图选择的颜色高亮
【中文标题】Altair 等值线图,基于折线图选择的颜色高亮【英文标题】:Altair choropleth map, color highlight based on line chart selection 【发布时间】:2020-12-24 07:32:51 【问题描述】:我正在绘制由字段Passenger_0_
着色的等值线图和显示Passenger_0_
在一天内由zone
演变的折线图。
我想在折线图中选择一条线 (zone
) 并在地图中突出显示,反之亦然(在地图中选择一个区域并在折线图中突出显示)。
目前,我可以在选择线时更改地图的整体颜色,但不知道如何仅更改所选区域的颜色。
我将不胜感激。
为了重现示例,您需要下载这两个文件:
output_data.csv
taxi_zones.geojson
然后运行这段代码得到一个名为long_df
的GeoDataFrame:
import altair as alt
import pandas as pd
import geopandas as gpd
import json
geo_json_file_loc= './taxi_zones.geojson'
with open(geo_json_file_loc) as json_data:
data = json.load(json_data)
gdf = gpd.GeoDataFrame.from_features((data))
gdf = gdf[gdf['borough']=='Manhattan']
gdf = gdf[['location_id','zone','geometry']]
gdf = gdf.rename(columns='location_id':'LocationID')
gdf['LocationID'] = pd.to_numeric(gdf['LocationID'])
output_data = pd.read_csv('./output_data.csv',sep=',')
def load_taxis_data(output_data, shape_data):
df_to_visualize = shape_data.copy()
pickups = output_data.groupby(['hour','dayofweek','LocationID']).sum()
listofdays = pd.unique(output_data['dayofweek'])
for hour in range(24):
for dayofweek in listofdays:
# get pickups for this hour and weekday
p = pd.DataFrame(pickups.loc[(hour, dayofweek)]).reset_index()
# add pickups to the Taxi Zones DataFrame
df_to_visualize = pd.merge(df_to_visualize, p, on="LocationID", how="left").fillna(0)
# rename column as per day and hour
df_to_visualize.rename(columns="pickups" : "Passenger_%d_%d"%(dayofweek, hour), inplace=True)
return df_to_visualize
gdf_merged = load_taxis_data(output_data, gdf)
# drop unwanted days
for hour in range(24):
for dayofweek in [5,6]:
column_to_drop = "Passenger_%d_%d"%(dayofweek, hour)
gdf_merged.drop([column_to_drop], axis=1, inplace=True)
gdf_merged.reset_index(level=0, inplace=True)
long_df = pd.wide_to_long(gdf_merged, ["Passenger_0_"], i='index', j="hour")
long_df = long_df.reset_index()
一旦你得到long_df
,这就是绘图的代码:
dict_json = json.loads(long_df[long_df['hour']==0].to_json())
colours_obj = alt.Color('properties.Passenger_0_:Q',
scale=alt.Scale(scheme='yelloworangered'),
title = "Pickups")
sel_line_hover = alt.selection_single(on='mouseover', empty='none')
sel_line_col = alt.selection_single()
sel_line_size = alt.selection_single(empty='none')
base = alt.Chart(alt.Data(values=dict_json['features'])).mark_geoshape(
stroke='black',
strokeWidth=1
).encode(
color=alt.condition(sel_line_col, colours_obj, alt.value('lightgray')),
tooltip = ['properties.zone:O',
'properties.Passenger_0_:Q']
).properties(
width=350,
height=750,
).add_selection(
sel_line_col
)
line = alt.Chart(long_df).mark_line().encode(
x='hour',
y='Passenger_0_',
color=alt.condition(sel_line_hover|sel_line_col, 'zone', alt.value('lightgray')),
size=alt.condition(sel_line_hover|sel_line_size, alt.value(4),alt.value(1)),
tooltip = ['zone:O']
).properties(
width=250,
height=750,
).add_selection(
sel_line_hover,sel_line_col,sel_line_size
)
base | line
这就是情节的作用:
提前感谢您的帮助!
【问题讨论】:
如果您可以提供Minimal reproducible example 来展示您遇到的问题,您将更有可能获得对您的问题有用的答案。当我运行你的代码 sn-p 我得到NameError: name 'long_df' is not defined
道歉@jakevdp 你是对的。我想简化消息,没想到实际上不可能用提供的信息重现示例。我已经编辑了这个问题,添加了指向计算long_df```, and the piece of code necessary to calculate
long_df```所需的.geojson
和.csv
文件的链接。我非常感谢您的时间和帮助。
【参考方案1】:
这是一个关于如何在 Altair 中实现双向交互的一般示例,仅使用来自示例存储库的数据。关键是在创建选择时甚至通过fields
参数设置应该被选择过滤的特征。然后将此选择和相应的条件添加到两个图的相同编码中。
import altair as alt
from vega_datasets import data
state_pop = data.population_engineers_hurricanes()[['state', 'id', 'population']]
state_map = alt.topo_feature(data.us_10m.url, 'states')
click = alt.selection_multi(fields=['state'])
choropleth = (alt.Chart(state_map).mark_geoshape().transform_lookup(
lookup='id',
from_=alt.LookupData(state_pop, 'id', ['population', 'state']))
.encode(
color='population:Q',
opacity=alt.condition(click, alt.value(1), alt.value(0.2)),
tooltip=['state:N', 'population:Q'])
.add_selection(click)
.project(type='albersUsa'))
bars = (
alt.Chart(
state_pop.nlargest(15, 'population'),
title='Top 15 states by population').mark_bar().encode(
x='population',
opacity=alt.condition(click, alt.value(1), alt.value(0.2)),
color='population',
y=alt.Y('state', sort='x'))
.add_selection(click))
choropleth & bars
【讨论】:
非常感谢您的回答@joelostblom。我现在正忙于另一个项目,但我会尽快测试它。 这是一个很好的例子!以上是关于qt折线图只显示两条线的主要内容,如果未能解决你的问题,请参考以下文章