python - 为什么 matplotlib.pyplot 在我的图中给了我很多行而不是一个?
问题描述
我正在生成数据并将它们存储在一个 numpy 数组中。我也在计算一个变量并将这些变量存储在另一个数组中。它们具有不同的形状和 ndim,但它们是可绘制的,因为我用另一个具有相同逻辑的简单代码进行了尝试。
import numpy as np
import matplotlib.pyplot as plt
a = np.array([0.05718623, 0.05446883, 0.04395619, 0.03004849])
b = np.array([[0.61745], [0.45825], [0.80061], [0.3719]])
plt.yscale('log')
plt.xscale('log')
plt.plot(a,b)
plt.show()
当我想使用以下代码用我存储的数据绘制两个数组时:
works = [Data]
probability = [Data2]
plt.yscale('log')
plt.xscale('log')
plt.plot(probability, works)
我明白了:
但是,当我在 plt.plot() 中放置一个“bo”时,我得到了这个:
works = [Data]
probability = [Data2]
plt.yscale('log')
plt.xscale('log')
plt.plot(probability, works, 'bo')
所以我不想要蓝点。相反,我想要一条像蓝点一样的曲线。我在这里想念什么?这背后的问题是什么?或者这个问题需要我如何产生我的数据?
PS:Data.ndim = (1000,) Data2.ndim = (1000,1)
解决方案
plt.plot(probability, works)
按照输入数组中列出的顺序将所有点与线段连接起来。
例如,plt.plot([1,2,3], [1,4,9])
按照给定的顺序在 (1,1)、(2,4) 和 (3, 9) 之间建立一个很好的分段线连接。另一方面,plt.plot([1,3,2], [1,9,4])
将 (1,1) 与 (3, 9) 与线段连接起来,将 (3, 9) 和 (2, 4) 与线段连接起来——我们在后一种情况下会得到一个丑陋的图。
正如 JohanC 所建议的,您需要对数据进行排序。仅对第一个数组进行排序将破坏对应关系:Data[0]
对应于Data2[0]
. 因此,我们需要排序Data
,但保留对应关系。zip(Data, Data2)
冻结通信。sorted
在 Python 中首先按第一个索引排序,即它会对 Data.Data 进行排序。最后,我们需要撤消zip
并取回我们的两个数组。
zip(*sorted(zip(Data, Data2))
正是这样做的。
推荐阅读
- python - Python os如何接受对SSH密钥的验证
- python - 在 Python 3 中用“,”替换“,”的奇怪问题
- api - API 策略以表单上传图像,使用临时文件夹还是仅通过 id 上传?
- c# - 捕获顶级 EF Core 异常
- javascript - 进行基于角色的访问控制的正确方法
- linux - /proc/$pid/maps 文件中没有显示的许多地址呢?
- python - 跳过 matplotlib 错误栏的第一个错误
- kubernetes - 如何多次运行 AutoScalling?
- android - 是否可以获取 TextView 的文本 Rects?
- git - 在 git rebase 上将“pick”更改为“squash”的快捷方式