У меня есть некоторые поверхностные данные, которые сгенерированы внешней программой как значения XYZ. Я хочу создать следующие графики, с помощью matplotlib:
Я посмотрел на несколько примеров для графического изображения поверхностей и контуров в matplotlib - однако, значения Z, кажется, функция X и Y т.е. Y ~ f (X, Y).
Я предполагаю, что должен буду так или иначе преобразовать свои переменные Y, но я еще не видел примера, что шоу, как сделать это.
Так, мой вопрос - это: учитывая ряд (X, Y, Z) точки, как я могу генерировать Поверхность и контурные графики от тех данных?
BTW, просто для уточнения, я НЕ хочу создавать диаграммы рассеяния. Также, хотя я упомянул matplotlib в заголовке, я не против использования rpy (2), если это позволит мне составлять эти таблицы.
для построения контурного графика вам нужно интерполировать ваши данные на регулярную сетку http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data
быстрый пример:
>>> xi = linspace(min(X), max(X))
>>> yi = linspace(min(Y), max(Y))
>>> zi = griddata(X, Y, Z, xi, yi)
>>> contour(xi, yi, zi)
для поверхности http://matplotlib.sourceforge.net/examples/mplot3d/surface3d_demo.html
>>> from mpl_toolkits.mplot3d import Axes3D
>>> fig = figure()
>>> ax = Axes3D(fig)
>>> xim, yim = meshgrid(xi, yi)
>>> ax.plot_surface(xim, yim, zi)
>>> show()
>>> help(meshgrid(x, y))
Return coordinate matrices from two coordinate vectors.
[...]
Examples
--------
>>> X, Y = np.meshgrid([1,2,3], [4,5,6,7])
>>> X
array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3]])
>>> Y
array([[4, 4, 4],
[5, 5, 5],
[6, 6, 6],
[7, 7, 7]])
контур в 3D http://matplotlib.sourceforge.net/examples/mplot3d/contour3d_demo.html
>>> fig = figure()
>>> ax = Axes3D(fig)
>>> ax.contour(xi, yi, zi) # ax.contourf for filled contours
>>> show()
Контурный график с помощью rpy2 + ggplot2:
from rpy2.robjects.lib.ggplot2 import ggplot, aes_string, geom_contour
from rpy2.robjects.vectors import DataFrame
# Assume that data are in a .csv file with three columns X,Y,and Z
# read data from the file
dataf = DataFrame.from_csv('mydata.csv')
p = ggplot(dataf) + \
geom_contour(aes_string(x = 'X', y = 'Y', z = 'Z'))
p.plot()
Поверхностный график с решеткой rpy2 +:
from rpy2.robjects.packages import importr
from rpy2.robjects.vectors import DataFrame
from rpy2.robjects import Formula
lattice = importr('lattice')
rprint = robjects.globalenv.get("print")
# Assume that data are in a .csv file with three columns X,Y,and Z
# read data from the file
dataf = DataFrame.from_csv('mydata.csv')
p = lattice.wireframe(Formula('Z ~ X * Y'), shade = True, data = dataf)
rprint(p)