首页 > 解决方案 > 在 matplotlib 时间序列“意大利面条”图中使线条变粗

问题描述

谢谢阅读。

我有一个情节,想让我的数据集中的最新年份脱颖而出。我的数据只是一个较长的时间序列,所以我想绘制 YoY 比较,所以我将其旋转,然后绘制它。

第一个代码块运行并大致给出了我所追求的(没有最近一年突出),然后在第二个代码块中我尝试让我的最新代码脱颖而出(这在技术上有效)但颜色不同,不'不匹配传说,甚至可以与另一年相同的颜色。

我可以在背景中看到旧系列。我想我正在创建另一个情节并将其放在首位,但是我怎样才能选择最近一年(在本例中为 2018 年)的原始线路并让它脱颖而出?

或者有没有更好的方法来完成整个过程?任何有关代码、格式或任何内容的提示将不胜感激,我对此很陌生!

非常感谢!

13仙1


第一块

# import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# create fake time series dataframe
index = pd.date_range(start='01-Jan-2012', end='01-01-2019', freq='M')
data = np.random.randn(len(index))
df = pd.DataFrame(data, index, columns=['Data'])

# pivot to get by month in rows, then year in columns
df_pivot = pd.pivot_table(df, index=df.index.month, columns=df.index.year, values='Data')

# plot
df_pivot.plot(title='Data by Year', figsize=(6,4))
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.tight_layout()
plt.show()

第一个块结果

第二块

# import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# create fake time series dataframe
index = pd.date_range(start='01-Jan-2012', end='01-01-2019', freq='M')
data = np.random.randn(len(index))
df = pd.DataFrame(data, index, columns=['Data'])

# pivot to get by month in rows, then year in columns
df_pivot = pd.pivot_table(df, index=df.index.month, columns=df.index.year, values='Data')

# plot
df_pivot.plot(title='Data by Year', figsize=(6,4))
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.tight_layout()

# plot the thicker last line
# **************** ERROR HERE *************************
plt.plot(df_pivot.iloc[:, -1:], lw=4, ls='--')
# **************** ERROR HERE *************************
plt.show()

第二块结果

标签: pythonpandasmatplotlib

解决方案


你可以把去年的线加粗。因为列是排序的,所以它将是轴中的最后一行(索引-1)。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# create fake time series dataframe
index = pd.date_range(start='01-Jan-2012', end='01-01-2019', freq='M')
data = np.random.randn(len(index))
df = pd.DataFrame(data, index, columns=['Data'])

# pivot to get by month in rows, then year in columns
df_pivot = pd.pivot_table(df, index=df.index.month, columns=df.index.year, values='Data')

# plot
ax = df_pivot.plot(title='Data by Year', figsize=(6,4))
ax.get_lines()[-1].set_linewidth(5)
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))

ax.figure.tight_layout()
plt.show()

在此处输入图像描述


推荐阅读