首页 > 解决方案 > 在 Matplotlib 中指定密度图的颜色范围

问题描述

以下代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde

# Generate fake data
x = np.random.normal(size=1000)
y = x * 3 + np.random.normal(size=1000)

# Calculate the point density
xy = np.vstack([x,y])
z = gaussian_kde(xy)(xy)

# Sort the points by density, so that the densest points are plotted last
idx = z.argsort()
x, y, z = x[idx], y[idx], z[idx]

fig, ax = plt.subplots()
ax.scatter(x, y, c=z, s=50, edgecolor='')
plt.show()

生成如下图:

在此处输入图像描述

如何将主题从红色更改为蓝色?像这样的东西:

import seaborn as sns
sns.palplot(sns.color_palette("Blues"))

在此处输入图像描述

标签: pythonmatplotlib

解决方案


scatter您可以按如下方式分配任何颜色图进行绘图。在这里,您将找到所有现有的颜色图matplotlib

您想要的颜色图名为Blues. 您必须导入matplotlib.cm才能访问颜色图,然后将所需的颜色图作为参数传递cmap给散点图中。此外,您可以显示颜色条以解释颜色。如果要反转颜色图,只需_r在该颜色图的末尾包含即可。例如,Blues_r将反转地图,比例现在从蓝色(低)变为白色(高)。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde
import matplotlib.cm as cm

# Generate fake data
x = np.random.normal(size=1000)
y = x * 3 + np.random.normal(size=1000)

# Calculate the point density
xy = np.vstack([x,y])
z = gaussian_kde(xy)(xy)

# Sort the points by density, so that the densest points are plotted last
idx = z.argsort()
x, y, z = x[idx], y[idx], z[idx]

fig, ax = plt.subplots()
ax_ = ax.scatter(x, y, c=z, cmap=cm.Blues, s=50, edgecolor='')
plt.colorbar(ax_)

在此处输入图像描述


推荐阅读