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

Python 如何在matplotlib中控制图形线的宽度?,python,pandas,matplotlib,graph,Python,Pandas,Matplotlib,Graph,我试图用以下数据在matplotlib中绘制线图,属于相同id的x、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

我试图用以下数据在matplotlib中绘制线图,属于相同id的x、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

如果有什么不清楚的地方,请告诉我。

根据评论,您需要知道一些事情:

如何设置线宽? 这很简单:
linewidth=number
。看

如何承受重量并使其成为一个显著的宽度? 这取决于你的体重范围。如果它始终在2和15之间,我建议简单地将其除以2,即:

linewidth=weight/2
如果你觉得这在美学上令人不快,可以除以一个更大的数字,尽管这会明显减少你得到的线宽

如何从
df2
中取出重量? 给定您描述的
df2
和显示的代码,
key
df2
id
。所以你想要:

df2[df2['id'] == key]['weight']
总而言之: 将grp.plot线替换为以下内容:

grp.plot(linestyle="solid", 
         linewidth=df2[df2['id'] == key]['weight'] / 2.0, 
         x = "x", y = "y", ax = ax, label = key)

(这就是添加了线宽条目的行。)

linewidth=“foo”然后浏览并查看要将foo设置为什么。很有可能,你想把你的体重控制在1到7英寸之间——远远超过这一数字是非常巨大的。你如何做到这一点完全取决于你的体重范围。嗯,我想实际问题还不清楚。您描述了任务,但没有描述问题。你试过什么了吗?结果如何?它在多大程度上不起作用?您是在哪一点被卡住的?@ScottMermelstein请举例说明,如果我的体重在2到15之间,那么相应的线宽如何依赖于它?如果您的体重在2到15之间,请尝试
linewidth=str(weight/2)
。那么您的线宽将在1到7.5之间变化。@ScottMermelstein谢谢,但您能否演示如何在代码中为每个“id”包含“线宽”。谢谢,我按照您的建议进行了尝试,但它显示了一个关键错误KeyError:“标签[6]不在[index]中”谢谢,尽管它仍然给了我错误ValueError:无法将字符串转换为float,所以它在删除str()后工作