【问题标题】:How to control width of graph line in matplotlib?如何控制matplotlib中图形线的宽度?
【发布时间】:2018-02-01 11:23:09
【问题描述】:

我正在尝试使用以下数据在 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="foo" 然后探索并查看您要将 foo 设置为什么。很有可能,你想将你的体重调整到 1 到 7 之间——远远超出这个范围是非常巨大的。你如何做到这一点完全取决于你的体重范围。
  • 好吧,我想实际的问题还不清楚。您描述了任务,但没有描述问题。你有没有尝试过什么?结果是什么?它在多大程度上不起作用?你是在什么时候卡住的?
  • @ScottMermelstein 请你举个例子来解释一下,如果我的体重范围从 2 到 15,那么各自的线宽如何依赖它?
  • 如果您的体重在 2 到 15 之间,请尝试linewidth=str(weight/2)。那么你的线宽会在 1 到 7.5 之间变化。
  • @ScottMermelstein 谢谢,但能否请您说明如何在每个“id”的代码中包含“linewidth”。

标签: python pandas matplotlib graph


【解决方案1】:

基于cmets,你需要知道几点:

如何设置线宽?

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

如何承受重量并使其具有显着的宽度?

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

linewidth=weight/2

如果您觉得这不美观,请除以更大的数字,但这显然会减少您获得的线宽数量。

如何减轻df2的重量?

鉴于您描述的df2 和您显示的代码,keydf2id。所以你想要:

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 条目的行。)

【讨论】:

  • 谢谢,我按照你的建议试过了,但它显示了一个关键错误 KeyError: '标签 [6] 不在 [index] 中'
  • 谢谢,虽然它仍然给了我错误 ValueError: could not convert string to float 所以它在删除 str() 后工作
猜你喜欢
  • 2017-11-12
  • 1970-01-01
  • 2010-10-27
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 2017-10-14
相关资源
最近更新 更多