将colorbar添加到python中的散点图时的ValueError

时间:2015-12-24 09:42:17

标签: python matplotlib data-manipulation

嗨我有一个包含多列的数据文件,我想添加一个带有颜色条的第三个轴。我想要做的是将第1列绘制为y,将第5列绘制为x轴也想在数据点上添加第4列颜色,但我收到以下错误:

ValueError: to_rgba: Invalid rgba arg "124.12834"
to_rgb: Invalid rgb arg "124.12834"
gray (string) must be in range 0-1

我的数据文件如下:

10.0    -1000.0 1300.0  2800.0  124.12834       426.450106      207.905003
10.0    -1000.0 1200.0  2000.0  127.856047      426.794984      230.104389
10.0    -500.0  1300.0  2800.0  123.074804      426.255793      205.883523
10.0    -500.0  1200.0  2000.0  127.10481       426.453441      228.650902
10.0    0.0     1300.0  2800.0  122.240729      425.953329      204.735877
10.0    0.0     1200.0  2000.0  126.435714      426.086112      227.646258
10.0    500.0   1200.0  2000.0  125.835211      425.704534      226.969429

我正在使用的代码是:

import numpy as np
import matplotlib.pyplot as plt

with open("test_data1.dat") as f:
    data = f.read()

data = data.split('\n')

x = [row.split('\t')[5] for row in data]
y = [row.split('\t')[1] for row in data]
z = [row.split('\t')[4] for row in data]          

cm = plt.cm.get_cmap('RdYlBu')
fig, ax = plt.subplots()
sc = ax.scatter(x, y, c=z, vmin=10, vmax=15,s=35.0,cmap=cm)
fig.colorbar(sc)
plt.show()

请注意,它不会复制数据并保护所有属性,因此您可以使用以下数据:这是代码中的数据字符串:

['10.0\t-1000.0\t1300.0\t2800.0\t124.12834\t426.450106\t207.905003',
 '10.0\t-1000.0\t1200.0\t2000.0\t127.856047\t426.794984\t230.104389',
 '10.0\t-500.0\t1300.0\t2800.0\t123.074804\t426.255793\t205.883523',
 '10.0\t-500.0\t1200.0\t2000.0\t127.10481\t426.453441\t228.650902',
 '10.0\t0.0\t1300.0\t2800.0\t122.240729\t425.953329\t204.735877',
 '10.0\t0.0\t1200.0\t2000.0\t126.435714\t426.086112\t227.646258',
 '10.0\t500.0\t1200.0\t2000.0\t125.835211\t425.704534\t226.969429']

由于

2 个答案:

答案 0 :(得分:3)

我删除了所有'\t'中的split(),因为我的文本编辑器会自动将'\ t'更改为空格。

  

string.split(s [,sep [,maxsplit]):如果可选的第二个参数sep不存在或者None,则单词由空格字符(空格,制表符,换行符,返回值,换页符)的任意字符串分隔。

它可以正确显示图表,以下是代码:

import numpy as np
import matplotlib.pyplot as plt

data = open("test_data1.dat").read().split('\n')

x = [row.split()[5] for row in data]
y = [row.split()[1] for row in data]
z = [row.split()[4] for row in data]          

cm = plt.cm.get_cmap('RdYlBu')
fig, ax = plt.subplots()
sc = ax.scatter(x, y, c=z, vmin=10, vmax=15,s=35.0,cmap=cm)
fig.colorbar(sc)
plt.show()

这是图表: diagram

我没有发生这个错误,可能是你没有正确拆分任何行(打印它来检查),或者你可以尝试重新安装 matplotlib

答案 1 :(得分:2)

您只需将值作为字符串而不是浮点数。你必须使用:

x = [float(row.split('\t')[5]) for row in data]
y = [float(row.split('\t')[1]) for row in data]
z = [float(row.split('\t')[4]) for row in data]

同样[1]获得第二行,因为索引在python中以0开头。因此,也许你得不到你想要的列。

如果您希望点的颜色不同,则必须调整范围vmin=10, vmax=15,以适合您的值,或将其留空,然后matplotlib会自动调整它们。