pandas 如何根据是否为周末以不同颜色绘制 Dataframe 行

hgncfbus  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(110)

我有一个 Dataframe 如下:

values  weekend   num_festive     kind    day_name
date                    
2018-01-01  236     0.0     1.0     1.0     Monday
2018-01-02  258     0.0     0.0     0.0     Tuesday
2018-01-03  235     0.0     0.0     0.0     Wednesday
2018-01-04  219     0.0     0.0     0.0     Thursday
2018-01-05  197     0.0     0.0     0.0     Friday
...     ...     ...     ...     ...     ...
2019-12-27  234     0.0     0.0     0.0     Friday
2019-12-28  260     1.0     0.0     0.0     Saturday
2019-12-29  226     1.0     0.0     0.0     Sunday
2019-12-30  216     0.0     0.0     0.0     Monday
2019-12-31  189     0.0     0.0     0.0     Tuesday

我想用不同的颜色画出时间序列,这取决于这一天是否是周末,用不同的颜色画一条线,就像这条:

我还希望能够将它绘制在另一个 Dataframe (格式完全相同)的旁边,以便比较两个时间序列。我编写了以下代码,它没有在坐标轴上绘制任何内容:

fig, ax = plt.subplots(1, 2, squeeze=True)
ax18, ax19 = ax[0], ax[1]

colors = {"weekend": "powderblue", "md": "black", "gu": "orange"}
for idx, val in md18.iterrows():
    if val["weekend"]:
        ax18.plot(idx, val["value"], color=colors["weekend"]
        )
    else:
        ax18.plot(idx, val["value"], color=colors["md"])

colors = {"weekend": "powderblue", "md": "black", "gu": "orange"}
for idx, val in cm18.iterrows():
    if val["weekend"]:
        ax18.plot(
            idx, val["value"], color=colors["weekend"]
        )
    else:
        ax18.plot(idx, val["value"], color=colors["gu"])

我也尝试过使用色调参数的海运线图,但它只处理周末值或不像不同时间序列的值,并沿着同一个轴绘制它们。考虑到我希望能够用庆祝活动复制它,庆祝活动的值比0或1多,因为可以是国家、地区或地方的?提前感谢!

2hh7jdfx

2hh7jdfx1#

希望我能理解这个问题:)
关于您的代码:
这段代码不起作用,因为你只把一个df(md18)标绘到一个轴(ax18)上,你需要把两个df标绘到两个轴上,才能得到想要的输出。

fig, ax = plt.subplots(1, 2, squeeze=True, figsize=(15,7))
ax18, ax19 = ax[0], ax[1]

colors = {"weekend": "powderblue", "md": "black", "gu": "orange"}

# Plot the first dataframe
for idx, val in md18.iterrows():
    if val["weekend"]:
        ax18.plot(idx, val["value"], color=colors["weekend"])
    else:
        ax18.plot(idx, val["value"], color=colors["md"])

# Plot the second dataframe
for idx, val in cm18.iterrows():
    if val["weekend"]:
        ax19.plot(idx, val["value"], color=colors["weekend"])
    else:
        ax19.plot(idx, val["value"], color=colors["gu"])

# Set plot properties
ax18.legend

此代码将:将生成两个单独的图,每个图对应一个 Dataframe ,并且将分别根据"md"和"gu"值对线进行着色。
其他解决方案:这将产生一个两个df在同一个轴上的单一图,并将根据周末值给线着色。

fig, ax = plt.subplots(figsize=(15,7))
sns.lineplot(x='date', y='values', hue='weekend', data=df, palette='Paired', ax=ax)

# Set plot properties
ax.legend(loc='upper left')
ax.set_title('Timeseries Plot')
ax.set_xlabel('Date')
ax.set_ylabel('Values')

plt.show()

相关问题