首页 > 解决方案 > 基于数据框列的pyplot图中的线条粗细

问题描述

首先,数据框:

日期 类别 12MKG 数量
202001 猫1 0.8947368 38.0
202002 猫1 0.8695652 46.0
202003 猫1 0.8913044 46.0
202004 猫1 0.88372093 43.0
202005 猫1 0.8913044 46.0
202006 猫1 0.8888889 45.0
202007 猫1 0.8780488 41.0
202008 猫1 0.925 40.0
202009 猫1 0.8684211 38.0
202010 猫1 0.76744187 43.0
202011 猫1 0.7111111 45.0
202012 猫1 0.6888889 45.0
202101 猫1 0.7083333 48.0
202102 猫1 0.73333335 45.0
202103 猫1 0.74 50.0
202104 猫1 0.71428573 56.0
202105 猫1 0.7241379 58.0
202106 猫1 0.7258065 62.0
202107 猫1 0.71875 64.0
202001 猫2 0.6244344 221.0
202002 猫2 0.6136364 220.0
202003 猫2 0.61085975 221.0
202004 猫2 0.6028708 209.0
202005 猫2 0.63013697 219.0
202006 猫2 0.6034483 232.0
202007 猫2 0.5914894 235.0
202008 猫2 0.59322035 236.0
202009 猫2 0.6008584 233.0
202010 猫2 0.5903614 249.0
202011 猫2 0.5836735 245.0
202012 猫2 0.57377046 244.0
202101 猫2 0.5795918 245.0
202102 猫2 0.56666666 270.0
202103 猫2 0.557971 276.0
202104 猫2 0.548951 286.0
202105 猫2 0.5270758 277.0
202106 猫2 0.53985506 276.0
202107 猫2 0.53488374 258.0
202001 三类 0.426 500.0
202002 三类 0.40963855 498.0
202003 三类 0.40365112 493.0
202004 三类 0.41129032 496.0
202005 三类 0.4144869 497.0
202006 三类 0.4 500.0
202007 三类 0.39478958 499.0
202008 三类 0.4137255 510.0
202009 三类 0.4035433 508.0

我想创建一个折线图。我想要每个类别一行,在 x 轴上我想要日期,在 y 轴上想要 12MKG。我还希望每条线都有不同的颜色,这是我迄今为止所管理的(在@Piotr Nowakowski 的支持下)。

import matplotlib.pylab as pl
import matplotlib.pyplot as plt

labels = set(df['categorie'].values)
colors = pl.cm.jet(np.linspace(0,1,len(labels)))
for key, color in zip(labels, range(len(labels))):
    data_x = df.loc[df['categorie']==key]['date']
    data_y = df.loc[df['categorie']==key]['12MKG']
    plt.plot(data_x, data_y, color=colors[color], label=key)
plt.legend()
plt.show()

现在我希望图中的线条具有不同的粗细,其中粗细随着数量列的增加而增加。线条粗细可以根据每个日期的数量变化,也可以根据最后一个数量值每条线一个粗细变化,在这种情况下基于日期 == 202107。

标签: pythondataframematplotlib

解决方案


我想出了这样的事情:

import matplotlib.pylab as pl
import matplotlib.pyplot as plt

labels = set(df['categorie'].values)
colors = pl.cm.jet(np.linspace(0,1,len(labels)))
width_lines = df.amount.values
for key, color, width in zip(labels, range(len(labels)), width_lines):
    data_x = df.loc[df['categorie']==key]['date']
    data_y = df.loc[df['categorie']==key]['12MKG']
    width = df.loc[df['categorie']==key]['amount']
    width = sum(width)
    plt.plot(data_x, data_y, color=colors[color], label=key, linewidth=width/100)
plt.legend()
plt.show()

问题是我不确定金额值的范围是多少。如果简单除法不符合您的情况,您可以尝试先聚合所有值,然后调整范围。


推荐阅读