簡體   English   中英

在python中將3D數據繪制為圖像

[英]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');

首先使用griddata

我將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM