【问题标题】:Multiple functions in one graph一张图中的多个功能
【发布时间】:2019-07-14 04:27:09
【问题描述】:

所以,我有一个名为 CT 的 numpy.ndarray,形状为 (10, 500)。

每一行都是一个函数,定义在称为 Gm 的 x 变量上。 Gm 是一个形状为 (1,500) 的 numpy.ndarray。

我需要在一张图中绘制 CT 矩阵中的 10 个函数(作为 Gm 的函数)并尝试以下操作:

# consumption functions over time    
plt.figure(figsize=(10,10))

TimeSteps = CT.shape[0]

for t in range(0,TimeSteps):
    plt.plot(Gm,CT[t].reshape(1,DiscG),'go',label='t')
plt.show()

这可行,但所有图形都以相同的颜色(绿色)显示,并且无法区分图形是否为 t = 0、1、2 等。

关于如何让 plt 为每个图表选择不同颜色并使其能够标记它们并将其放入文本框中的任何想法。

【问题讨论】:

  • 您的线路规格是“go”,它是带有“o”标记的绿色,去掉“g”,它将是不同的颜色。在 matplotlib 文档中查看更多信息
  • 对于“文本框”,我假设您的意思是图例?如果是这样,请创建label=t,然后在循环后调用plt.legend()
  • 关于颜色@GlobalTraveler ...用“o”替换“go”不会为每个图形创建唯一的颜色。相反,看起来图表上的不同点(在某些间隔内)具有不同的颜色。所以,仍然无法区分。
  • @terman 这些点可能重叠,造成看似没有差异,您可以调整 alpha 值以进行健全性检查或使用不同的子图。
  • legend ... @DavidG ... 我尝试这样做,但留下了回溯... ValueError:595x70022 像素的图像尺寸太大。每个方向必须小于 2^16.... 看起来可能与颜色问题有关...

标签: python matplotlib plot time-series


【解决方案1】:

在提问时使用minimal and verifiable example 是很常见的做法。您作为问题提出的问题实际上是代码按预期工作但不是您希望它们成为的示例。这是您在问题上提出并由我和@DavidG回答时具有不同颜色和不同标签的散点示例。

import matplotlib.pyplot as plt
import numpy as np
# dummy data
x = np.random.rand(10, 100)

fig, ax = plt.subplots()
[ax.plot(xi, marker = 'o', label = idx) for idx, xi in enumerate(x)]
ax.legend()
fig.show()

这里的颜色循环源于 matplotlib 使用的标准颜色图,如果您想使用特定颜色或更改标准循环,请查看matplotlib提供的文档

【讨论】:

    【解决方案2】:

    好的 - 找到了另一种更简单的方法......只是转置输入:

    plt.figure(figsize=(10,10))
    plt.plot(Gm.transpose(),CT.transpose(),marker='o')
    plt.show()
    

    这样,整个函数就获得了独特的颜色,并且似乎已解决。所以我最初的猜测是运行一个 for 循环太复杂了。

    【讨论】:

      猜你喜欢
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多