如何控制matplotlib中图线的宽度?

时间:2017-08-23 18:29:55

标签: python pandas matplotlib graph

我试图在matplotlib中使用以下数据绘制线图,x,属于同一id的y点是一行,因此下面的df中有3行。

      id     x      y
0      1    0.50    0.0
1      1    1.00    0.3
2      1    1.50    0.5
4      1    2.00    0.7
5      2    0.20    0.0
6      2    1.00    0.8
7      2    1.50    1.0
8      2    2.00    1.2
9      2    3.50    2.0
10     3    0.10    0.0
11     3    1.10    0.5
12     3    3.55    2.2

可以使用以下代码简单地绘制:

import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib notebook

fig, ax = plt.subplots(figsize=(12,8))
cmap = plt.cm.get_cmap("viridis")
groups = df.groupby("id")
ngroups = len(groups)

for i1, (key, grp) in enumerate(groups):
    grp.plot(linestyle="solid", x = "x", y = "y", ax = ax, label = key)

plt.show()

但是,我有另一个数据框df2,其中给出了每个id的重量,我希望找到一种方法来根据它的重量控制每条线的厚度,更大的重量线条越粗。我怎样才能做到这一点?该线的重量和宽度之间会跟着关系

  id     weight
0  1          5
1  2         15
2  3          2

如果有任何不清楚的地方,请告诉我。

1 个答案:

答案 0 :(得分:1)

根据评论,您需要了解一些事项:

如何设置线宽?

这很简单:linewidth=number。见https://matplotlib.org/examples/pylab_examples/set_and_get.html

如何减轻重量并使其显着宽度?

这取决于您的体重范围。如果它始终在2到15之间,我建议简单地将其除以2,即:

linewidth=weight/2

如果你发现这在美学上是不愉快的,除以更大的数字,虽然这显然会减少你得到的线宽数量。

如何减轻df2的重量?

根据您描述的df2和您展示的代码,keyid的{​​{1}}。所以你想要:

df2

全部放在一起:

使用以下内容替换您的grp.plot行:

df2[df2['id'] == key]['weight']

(所有这些都是您添加了线宽条目的行。)