python - 使 matplotlib 时间序列 'spaghetti' 图中的线条变粗

标签 python pandas matplotlib

感谢您的阅读。

我有一个情节,希望使我的数据集中最新的一年脱颖而出。我的数据只是一个长期的时间序列,所以我想绘制同比比较,所以我对其进行旋转,然后绘制它。

第一段代码运行并大致给出了我所追求的内容(没有最近一年的突出),然后在第二段代码中我尝试使我最新的突出(技术上可行),但颜色是不同,与传说不符,甚至可能与另一年的颜色相同。

我可以在背景中看到旧系列。我想我正在创建另一个情节并将其放在上面,但是我如何选择最近一年(在本例中为 2018 年)的原始行并使其脱颖而出?

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

非常感谢!

13sen1

<小时/>

第一 block

# 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()

firstblockresult

第二 block

# 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()

secondblockresult

最佳答案

你可以把去年的线加粗。由于列已排序,因此它将是轴中的最后一行(索引 -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()

enter image description here

关于python - 使 matplotlib 时间序列 'spaghetti' 图中的线条变粗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54097979/

相关文章:

python - ValueError : Cannot set tensor: Got value of type FLOAT64 but expected type FLOAT32 for input 0, 名称:serving_default_input_1:0

python - 如何只查看 pandas 数据框中的某些行?

python - 在子图之外放置多个颜色条 (matplotlib)

python - 在 python 中从矩阵创建网格

python - R - 如何将 HTML 代码嵌入到 Jupyter 笔记本输出中?

python - 在 PostgreSQL 中插入多个相同的值?

python - Nosetests 导入错误

python - 如何将每个列表项分配给不同的 pandas 数据框?

python-3.x - GroupBy 但仍保留所有行

python - 动画绘图 networkx 边