Mat*_*hio 2 python matplotlib subplot line-plot seaborn
我RelPlot
使用 Seaborn 绘制了一个简单的图,它返回了一个Facetgrid
对象。我使用的代码如下:
import seaborn as sns
palette = sns.color_palette("rocket_r")
g1 = sns.relplot(
data=df,
x="number_of_weeks", y="avg_streams",
hue="state", col="state",
kind="line", palette=palette,
height=5, aspect=1, facet_kws=dict(sharex=False), col_wrap=3,
)
Run Code Online (Sandbox Code Playgroud)
我正在使用的数据框具有以下结构:
avg_streams date year number_of_weeks state
4 0.104011 31-01 2020 4 it
5 1.211951 07-02 2020 5 it
6 0.559374 14-02 2020 6 it
7 0.304257 21-02 2020 7 it
8 0.199218 28-02 2020 8 it
... ... ... ... ... ...
175 -0.938890 26-06 2020 25 br
176 -0.483821 03-07 2020 26 br
177 -0.083704 10-07 2020 27 br
178 0.165312 17-07 2020 28 br
179 0.218601 24-07 2020 29 br
Run Code Online (Sandbox Code Playgroud)
我想将其他线图添加到单个子图中。我的最终目标是绘制每个子图中的所有线条,但突出显示每个不同子图的不同状态。
所以我想为我的每个不同的子图得到这样的东西Facetgrid
:
这是我为上一个情节编写的代码:
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
palette = {c:'red' if c=='it' else 'grey' for c in df.state.unique()}
fig, ax = plt.subplots(figsize=(15, 7))
plot=sns.lineplot(ax=ax,x="number_of_weeks", y="avg_streams", hue="state", data=df, palette=palette)
lines = ax.get_lines()
lines[0].set_linewidth(5)
plot.set(title='Streams trend')
Run Code Online (Sandbox Code Playgroud)
但我不知道如何“合并”这两个图。我怎样才能实现我的目标?
编辑:我尝试“手动”添加绘图,选择我的Facetgrid
. 我遵循了这个问题:Add lineplot to subplot,我能够添加一条简单的线。
这是我的尝试,我尝试在已有的图中添加一条简单的线:
palette = sns.color_palette("rocket_r")
g1 = sns.relplot(
data=df,
x="number_of_weeks", y="avg_streams",
hue="state", col="state",
kind="line", palette=palette,
height=5, aspect=1, facet_kws=dict(sharex=False), col_wrap=3,
)
axes = g1.fig.axes
print(axes)
axes[0].plot([20, 30], [40, 50], 'k-')
Run Code Online (Sandbox Code Playgroud)
我找到了解决办法,代码如下:
import seaborn as sns
palette = sns.color_palette("tab10",6)
g1 = sns.relplot(
data=df,
x="number_of_weeks", y="avg_streams",
hue="state", col="state",
kind="line", palette=palette,
height=5, aspect=1, facet_kws=dict(sharex=False), col_wrap=3, linewidth=5, zorder= 5
)
axes = g1.fig.axes
states = df.state.unique()
for index, state in enumerate (states, start=0):
df_temp = df.loc[df['state'] != state]
palette1 = {c:'grey' for c in df_temp.state.unique()}
sns.lineplot(ax=axes[index],x="number_of_weeks", y="avg_streams", hue="state", data=df_temp, palette=palette1)
axes[index].get_legend().remove()
axes[index].set_xlabel('')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3037 次 |
最近记录: |