在python

时间:2018-08-07 11:49:17

标签: python matplotlib data-visualization

我有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之类的图像形式出现。

2 个答案:

答案 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');

example using tricolor

另一种解决方案是在可视化之前,使用例如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');

using griddata first

答案 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