Python: 2d контурный график с фиксированными x и y для 6 рядов дробных данных (z)

#python #python-2.7 #pandas #matplotlib

#python #python-2.7 #pandas #matplotlib

Вопрос:

Я пытаюсь использовать контурный график для отображения массива дробных данных (от 0 до 1) на 6 высотах (5, 10, 15, 20, 25, и 30) с фиксированной осью x (серия «WN», от 1 до 2300). y (высота)отличается для каждой серии и прерывистый, поэтому мне нужно интерполировать между высотами.

 WN,5,10,15,20,25,30
1,0.9984898,0.99698234,0.99547797,0.99397725,0.99247956,0.99098486
2,0.99814528,0.99629492,0.9944489,0.99260795,0.99077147,0.98893934
3,0.99765164,0.99530965,0.99297464,0.99064702,0.98832631,0.98601222
4,0.99705136,0.99411237,0.99118394,0.98826683,0.98535997,0.9824633
5,0.99606526,0.99214685,0.98824716,0.98436642,0.98050326,0.97665751
6,0.98111153,0.96281821,0.94508928,0.92790776,0.91125059,0.89509743
7,0.99266499,0.98539108,0.97816986,0.97100824,0.96390355,0.95685524
...
 

Есть идеи? Спасибо!

Ответ №1:

Используя matplotlib, вам нужны ваши значения X (строка), Y (столбец) и Z. Функция matplotlib ожидает данные в определенном формате. Ниже вы увидите, что сетка помогает нам получить этот формат.

Здесь я использую pandas для импорта ваших данных, которые я сохранил в CSV-файл. Вы можете загружать свои данные любым удобным для вас способом. Ключевым моментом является подготовка ваших данных для функции построения графика.

 import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

#import the data from a csv file
data = pd.read_csv('C:/book1.csv')

#here, I let the x values be the column headers (could switch if you'd like)
#[1:] don't want the 'WN' as a value
X = data.columns.values[1:]

#Here I get the index values (a pandas dataframe thing) as the Y values
Y = data['WN']

#don't want this column in your data though
del data['WN']

#need to shape your data in preparation for plotting
X, Y = np.meshgrid(X, Y)

#see http://matplotlib.org/examples/pylab_examples/contour_demo.html
plt.contourf(X,Y,data)
 

введите описание изображения здесь