如何随着时间的推移可视化定量或定性的数据,但绝不是两者兼而有之?
How to visualize through time a data that is quantitative or qualitative, but never both?
我有一个 csv 文件,其中有些行有文字,有些行有数字。像 :
column1 column2 column3
date 2019 2020 2021
color blue blue yellow
velocity 1 22 3
power 4 2 1
而且我需要在图表中将其可视化,使我能够直观地搜索所有属性(颜色、速度、功率)在时间段内的模式。但所有情节 plots 我发现只允许我单独跟踪定量或定性值,而不是一起跟踪。
我什至无法在脑海中想象一个情节必须如何才能允许这样......我能想到的唯一方法是将每个定性值转置到一个新行,并向其添加一个任意常数,比如:
column1 column2 column3
date 2019 2020 2021
blue 100 100 0
yellow 0 0 100
velocity 1 22 3
power 4 2 1
因此,例如,在折线图中,顶部会有一条直线指示正在发生的定性值,而所有其他直线都位于底部。我想它可以根据行索引(日期、颜色、速度、功率)着色,让我可以直观地识别它。但我很确定有更好的方法。
任何绘图库都可以接受,虽然 plotly 是首选,因为它很容易。
- 您提供的数据是四个因素。所以你可以使用 scatter for x,y,size & color
- color 是定性的明显选择。其他人也可以通过使用分类数据类型来定性。
import io
import pandas as pd
import plotly.express as px
df = pd.read_csv(io.StringIO(""" column1 column2 column3
date 2019 2020 2021
color blue blue yellow
velocity 1 22 3
power 4 2 1 """), sep="\s+").T
df["date"] = df["date"].astype(int)
df["velocity"] = df["velocity"].astype(int)
df["power"] = df["power"].astype(int)
fig = px.scatter(df, x="date", y="velocity", color="color", size="power")
fig.update_layout(xaxis={"tickformat":"d"})
标准 px.scatter(df, x="date", y="velocity", color="color", size="power")
似乎工作正常。但是,如果您的设置不仅代表更复杂的现实世界案例,我建议稍微调整一下,以便图例中的名称不会 say 'yellow'
而是 display 'red'
,这正是将要发生的事情,因为 px.scatter(color ='color')
中的 color
实际上并没有 assign颜色,而是 对应的分类变量。我怀疑同时显示 和 命名图例中的颜色有点多余。不管怎样,我希望你会发现这个有用:
fig.for_each_trace(lambda t: t.update(marker_color = t.name, name=''))
完整代码:
import pandas as pd
import plotly.express as px
df = pd.DataFrame({'date': {'column1': 2019, 'column2': 2020, 'column3': 2021},
'color': {'column1': 'blue', 'column2': 'blue', 'column3': 'yellow'},
'velocity': {'column1': 1, 'column2': 22, 'column3': 3},
'power': {'column1': 4, 'column2': 2, 'column3': 1}})
fig = px.scatter(df, x="date", y="velocity", color="color", size="power")
f = fig.full_figure_for_development(warn=False)
fig.for_each_trace(lambda t: t.update(marker_color = t.name, name=''))
fig.show()
我有一个 csv 文件,其中有些行有文字,有些行有数字。像 :
column1 column2 column3
date 2019 2020 2021
color blue blue yellow
velocity 1 22 3
power 4 2 1
而且我需要在图表中将其可视化,使我能够直观地搜索所有属性(颜色、速度、功率)在时间段内的模式。但所有情节 plots 我发现只允许我单独跟踪定量或定性值,而不是一起跟踪。 我什至无法在脑海中想象一个情节必须如何才能允许这样......我能想到的唯一方法是将每个定性值转置到一个新行,并向其添加一个任意常数,比如:
column1 column2 column3
date 2019 2020 2021
blue 100 100 0
yellow 0 0 100
velocity 1 22 3
power 4 2 1
因此,例如,在折线图中,顶部会有一条直线指示正在发生的定性值,而所有其他直线都位于底部。我想它可以根据行索引(日期、颜色、速度、功率)着色,让我可以直观地识别它。但我很确定有更好的方法。
任何绘图库都可以接受,虽然 plotly 是首选,因为它很容易。
- 您提供的数据是四个因素。所以你可以使用 scatter for x,y,size & color
- color 是定性的明显选择。其他人也可以通过使用分类数据类型来定性。
import io
import pandas as pd
import plotly.express as px
df = pd.read_csv(io.StringIO(""" column1 column2 column3
date 2019 2020 2021
color blue blue yellow
velocity 1 22 3
power 4 2 1 """), sep="\s+").T
df["date"] = df["date"].astype(int)
df["velocity"] = df["velocity"].astype(int)
df["power"] = df["power"].astype(int)
fig = px.scatter(df, x="date", y="velocity", color="color", size="power")
fig.update_layout(xaxis={"tickformat":"d"})
标准 px.scatter(df, x="date", y="velocity", color="color", size="power")
似乎工作正常。但是,如果您的设置不仅代表更复杂的现实世界案例,我建议稍微调整一下,以便图例中的名称不会 say 'yellow'
而是 display 'red'
,这正是将要发生的事情,因为 px.scatter(color ='color')
中的 color
实际上并没有 assign颜色,而是
fig.for_each_trace(lambda t: t.update(marker_color = t.name, name=''))
完整代码:
import pandas as pd
import plotly.express as px
df = pd.DataFrame({'date': {'column1': 2019, 'column2': 2020, 'column3': 2021},
'color': {'column1': 'blue', 'column2': 'blue', 'column3': 'yellow'},
'velocity': {'column1': 1, 'column2': 22, 'column3': 3},
'power': {'column1': 4, 'column2': 2, 'column3': 1}})
fig = px.scatter(df, x="date", y="velocity", color="color", size="power")
f = fig.full_figure_for_development(warn=False)
fig.for_each_trace(lambda t: t.update(marker_color = t.name, name=''))
fig.show()