更改线图中特定线的线宽 pandas/matplotlib

Eli*_*sky 4 python matplotlib dataframe pandas

我正在绘制一个看起来像这样的数据框。

Date    2011    2012    2013    2014    2015    2016    2017    2018    2019    2020
Date                                        
01 Jan  12.896  13.353  12.959  13.011  13.073  12.721  12.643  12.484  12.876  13.102
02 Jan  12.915  13.421  12.961  13.103  13.125  12.806  12.644  12.600  12.956  13.075
03 Jan  12.926  13.379  13.012  13.116  13.112  12.790  12.713  12.634  12.959  13.176
04 Jan  13.051  13.414  13.045  13.219  13.051  12.829  12.954  12.724  13.047  13.187
05 Jan  13.176  13.417  13.065  13.148  13.115  12.874  12.956  12.834  13.098  13.123
Run Code Online (Sandbox Code Playgroud)

绘图代码在这里。

ice_data_dates.plot(figsize=(20,12), title='Arctic Sea Ice Extent', lw=3, fontsize=16, ax=ax, grid=True)
Run Code Online (Sandbox Code Playgroud)

这为数据框中列出的每一年绘制了一年中每一天的线图。但是,我想让 2020 年的线条比其他线条粗得多,以便更清晰地突出。有没有办法使用这一行代码来做到这一点?或者我是否需要手动绘制所有年份,以便我可以分别控制每条线的粗细?附上一张当前图片,线条粗细都一样。

在此处输入图片说明

deb*_*sim 6

您可以像这样分两行来完成:

ice_data_dates.loc[:, ice_data_dates.columns != "2020"].plot(figsize=(20, 12), title='Arctic Sea Ice Extent', lw=3, fontsize=16, ax=ax, grid=True)
ice_data_dates["2020"].plot(figsize=(20, 12), title='Arctic Sea Ice Extent', lw=15, fontsize=16, ax=ax, grid=True)
Run Code Online (Sandbox Code Playgroud)

这将首先绘制除 2020 年列之外的整个 DataFrame,然后仅绘制 2020 年。输出如下所示: 更宽的线

这使用了与所选答案不同的方法,但给出了相同的结果。


yat*_*atu 5

您可以迭代图中的线条,可以使用 检索ax.get_lines,并使用set_linewidth如果其label匹配感兴趣的值来增加宽度:

fig, ax = plt.subplots()
df.plot(figsize=(20,12), title='Arctic Sea Ice Extent', 
        lw=3, fontsize=16, ax=ax, grid=True)

for line in ax.get_lines():
    if line.get_label() == '2020':
        line.set_linewidth(15)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明