在 python 中将颜色条添加到散点图时出现 ValueError
ValueError while adding colorbar to scatter plot in python
您好,我有一个包含多列的数据文件,我想添加带有颜色栏的第三个轴。我想要做的是将第 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']
谢谢
您只是获取字符串形式的值,而不是浮点数。您必须使用:
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 会自动调整它们。
我删除了所有 split()
中的 '\t'
,因为我的文本编辑器自动将 '\t' 更改为 space。
string.split(s[, sep[, maxsplit]): If the optional second argument sep is absent or None, the words are separated by arbitrary strings of whitespace characters (space, tab, newline, return, formfeed).
并且可以正确显示图表,这里是代码:
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()
这是示意图:
我没有出现这个错误,可能是你没有正确拆分任何行(打印出来检查一下),或者你可以尝试重新安装 matplotlib。
您好,我有一个包含多列的数据文件,我想添加带有颜色栏的第三个轴。我想要做的是将第 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']
谢谢
您只是获取字符串形式的值,而不是浮点数。您必须使用:
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 会自动调整它们。
我删除了所有 split()
中的 '\t'
,因为我的文本编辑器自动将 '\t' 更改为 space。
string.split(s[, sep[, maxsplit]): If the optional second argument sep is absent or None, the words are separated by arbitrary strings of whitespace characters (space, tab, newline, return, formfeed).
并且可以正确显示图表,这里是代码:
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()
这是示意图:
我没有出现这个错误,可能是你没有正确拆分任何行(打印出来检查一下),或者你可以尝试重新安装 matplotlib。