【问题标题】:Matplotlib: How to plot grid boxes colored by numberMatplotlib:如何绘制按数字着色的网格框
【发布时间】:2014-12-12 07:54:06
【问题描述】:

我有一个包含以下数据的文件

0018.00 -083.00 45
0018.00 -082.00 55
0018.00 -081.00 15
0019.00 -100.00 25
0019.00 -099.00 45
0019.00 -098.00 05
0019.00 -086.00 25
0019.00 -085.00 25
0019.00 -084.00 35
0019.00 -083.00 45

第一列包含 y 值。
第二列包含 x 值。
第三列包含 z 值。
我想为这个数据集的每个 z 值分配一种颜色并绘制网格框。

例如

05=Brown
15=Red
25=Green
35=Blue
45=Purple
55=Orange

它看起来类似于下图 ![在此处输入图片描述][1]

我曾尝试查看 mathplotlib 缩略图,但它们似乎只适用于随机数据集。

我应该使用什么代码来绘制我的列数据?

到目前为止,我已经尝试了以下代码

import numpy
import matplotlib.pyplot as plt

cm = plt.cm.get_cmap('RdYlBu')

var = numpy.loadtxt('map.csv')

y = var[:, 0:1]
x = var[:, 1:2]
colors = var[:, 2:3]

plt.scatter(x, y, colors, cmap=cm)
plt.show()

【问题讨论】:

  • 你能发布实际代码而不是屏幕截图吗?

标签: python numpy matplotlib weather


【解决方案1】:

你可以使用imshow

import numpy
import matplotlib.pyplot as plt

content = numpy.loadtxt('map.csv', delimiter=',')

# here you would have to create a "grid"
# where each value in content would be "binned" to the correct position,
# creating the array named "bins"

plt.imshow(bins, 
           interpolation='nearest',
           cmap=plt.cm.RdYlBu,
           extent=[xmin, xmax, ymin, ymax])  ## you should be able to figure these out

【讨论】:

  • 我收到“IOError: 无法将文件 'map.csv' 解释为泡菜”
  • 对不起,正确的函数是numpy.loadtxt,我更正了。另一个类似的、更强大的功能是numpy.genfromtxt
【解决方案2】:

虽然您使用scatter 展示的方法确实有效,但需要进行一些调整才能使事情看起来正确。试一试:

import numpy as np
import matplotlib.pyplot as plt

# unpack columns from map.csv into x y and z variables.
y, x, z = np.loadtxt('map.csv').T

ax = plt.subplot(111, aspect='equal')
ax.scatter(x, y, c=z, marker='s', s=160, lw=0, cmap='RdYlBu')
plt.show()

请注意,我已经使用了标记形状 (marker='s') 和大小 (s=160),并指定将 z 值用作颜色 (c=z)。

但是,正如您所注意到的,scatter 并非旨在显示您真正想要的规则网格。您最好使用imshow 或@heltonbiker 建议的pcolor 变体之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 2011-08-02
    • 2014-09-06
    • 1970-01-01
    • 2016-09-27
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多