2015-12-24 2 views
2

Привет, У меня есть файл данных с несколькими столбцами, и я хочу добавить третью ось с цветной панелью. То, что я хочу сделать, это сюжет первой колонки, как у и 5-я колонок, как оси х и хочет добавить 4-й столбец с цветом по точкам данных, но я получаю следующее сообщение об ошибке:ValueError при добавлении colorbar для разброса графика в python

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

Вы просто получить значение как строки не как поплавки. Вы должны использовать:

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] получает вторую строку, так как индексы начинаются с 0 в python. Поэтому, возможно, вы не получите нужных столбцов.

Если вы хотите, чтобы точки были окрашены по-разному, вы должны отрегулировать диапазон vmin=10, vmax=15,, чтобы соответствовать вашим значениям, или оставьте поле пустым, затем matplotlib автоматически отрегулирует их.

3

Я удаляю '\t' всего split(), потому что мой текстовый редактор автоматически изменил '\ t' на космос.

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() 

Вот диаграмма: diagram

Эта ошибка не приходила мне в голову, может быть вы не правильно разделил строку (распечатайте ее для проверки), или вы можете попытаться переустановить matplotlib.

Смежные вопросы