Построение двухмерного контурного графика на основе данных xyz - PullRequest
0 голосов
/ 26 ноября 2018

РЕДАКТИРОВАТЬ: я ответил в комментариях, но я попробовал метод в отмеченном посте - мои данные z не рассчитываются по моим x и y, поэтому я не могу использовать такую ​​функцию.

У меня есть данные xyz, которые выглядят следующим образом:

NEW: данные xyz в файле, который я создаю - я извлекаю их как x, y, z

И я отчаянно пытаюсь получить график, который имеет x против y с z в качестве цвета.

y - это данные бинарных данных, которые идут (например) от 2,5 до 0,5 в неравных ячейках.Таким образом, значения y одинаковы для одного набора данных x и z.Данные x это температура, а z это информация о плотности.

Итак, я ожидаю, что график, похожий на набор прямоугольников со сложением, где есть градиент цвета для одного набора значений y, который охватывает множество значений x.

Однако всеКоды, которые я пробовал, не любят мои значения z, и лучшее, что я могу сделать, это:

Оси выглядят правильно, но цветная полоса идет снизу вверх к вершине оси y вместопостроение одного значения z для каждого значения x с правильным значением y

Я получил это для работы с этим кодом:

import matplotlib.cm as cm
from matplotlib.colors import LogNorm
import numpy as np
import scipy.interpolate
data=pandas.read_csv('Data.csv',delimiter=',', header=0,index_col=False)
x=data.tempbin
y=data.sizefracbin
z=data.den
x=x.values
y=y.values
z=z.values
X,Y=np.meshgrid(x,y)
Z=[]
for i in range(len(x)):
    Z.append(z)
Z=np.array(Z)
plt.pcolormesh(X,Y,Z)
plt.colorbar()
plt.show()

Я перепробовал все, что я мог найти в Интернете, такиекак в посте здесь: matplotlib 2D-график из значений x, y, z

Но либо есть проблема с изменением моих значений z, либо он просто дает мне пустые графики с различными ошибкамиделать (я думаю) с моими значениями z.

Я что-то упустил?Спасибо за вашу помощь!

Редактируйте в ответ на: ImportanceOfBeingErnest

Я попробовал это:

import matplotlib.cm as cm
from matplotlib.colors import LogNorm
import numpy as np
import scipy.interpolate
data=pandas.read_csv('Data.csv',delimiter=',', header=0,index_col=False)
data.sort_values('sizefrac')
x=data.tempbin
y=data.sizefrac
z=data.INP
x=x.values
y=y.values
z=z.values
X=x[1:].reshape(N,N)
Y=y[1:].reshape(N,N)
Z=z[1:].reshape(N,N)
plt.pcolormesh(X,Y,Z)
plt.colorbar()
plt.show()

и получил очень пустой график.Просто показал мне топоры и цветную полосу, как на моем прикрепленном изображении, но чисто белый внутри осей!Нет ошибок или чего-то еще ... И изменение формы мне нужно удалить точку данных из каждой, потому что в противном случае изменение формы не будет работать

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Ответ был найден Сильматороном в комментарии к его ответу выше - ответ выше не помог, но в комментариях он заметил, что данные X, Y не привязаны к сетке w, что создаст прямоугольники на графике, а такжеупомянул, что Z должен быть на единицу меньше X и Y - из этого я мог бы исправить свой код - спасибо всем

0 голосов
/ 26 ноября 2018

Адаптируя связанный вопрос к вашей проблеме, вы должны получить:

import numpy as np
import matplotlib.pyplot as plt

x = list(range(10))*10
y = np.repeat(list(range(10)), 10)

# build random z data
z = np.multiply(x, y)

N = int(len(z)**.5)
Z = z.reshape(N, N)
plt.imshow(Z[::-1], extent=(np.amin(x), np.amax(x), np.amin(y), np.amax(y)), aspect = 'auto')

plt.show()
...