[英]Plotting 3D data as an image in python
我有3維數據。 我想繪制前兩個尺寸並按第三個顏色着色。 我希望它像hist2d一樣顯示,除了希望不被前兩個維着色外,我希望它由第三個維着色。 我認為這將需要對所有內容進行分箱。 如何做到這一點?
示例數據:
x = np.random.normal(loc=10, scale=2, size=100)
y = np.random.normal(loc=25, scale=5, size=100)
z = np.cos(x)+np.sin(y)
我想繪制x vs y並通過強度z着色。 但是,不只是一個散點圖,我希望它出來像圖像這樣 。
一種簡單的解決方案,因為數據不是在網格上構建的,所以可以使用matplotlib
tripcolor
(也有tricontourf
):
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
x = np.random.normal(loc=10, scale=2, size=100)
y = np.random.normal(loc=25, scale=5, size=100)
z = np.cos(x)+np.sin(y)
plt.tripcolor(x, y, z);
plt.plot(x, y, '.k');
另一種解決方案是在可視化之前,使用例如Scipy的griddata
將數據插值到常規網格上:
from scipy.interpolate import griddata
# define the grid
x_fine = np.linspace(min(x), max(x), 200)
y_fine = np.linspace(min(y), max(y), 200)
x_grid, y_grid = np.meshgrid(x_fine, y_fine)
# interpolate the data:
z_grid = griddata((x, y), z, (x_grid.ravel(), y_grid.ravel()), method='cubic').reshape(x_grid.shape)
plt.pcolor(x_fine, y_fine, z_grid);
plt.plot(x, y, '.k');
我將ggplot用於R,而不是用於python,但是,這里有一個示例:
import pandas as pd
import numpy as np
# is this the best implementation of ggplot?
from plotnine import *
x = np.random.normal(loc=10, scale=2, size=100)
y = np.random.normal(loc=25, scale=5, size=100)
z = np.cos(x)+np.sin(y)
df = pd.DataFrame({'x':x, 'y':y, 'z':z})
p = ggplot(df, aes(x='x', y='y', colour='z')) + geom_point()
p = p + scale_color_distiller(type='div', palette='RdYlBu')
p
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.