我有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着色。但是,不仅仅是散点图,我希望它以this之类的图像形式出现。
答案 0 :(得分:2)
一种简单的解决方案,因为数据不是基于网格构建的,所以要使用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');
答案 1 :(得分:0)
我将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