添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Matplotlib colormap,散点图传递第三个变量的颜色:无效的RGBA参数

0 人关注

我们正在matplotlib上构建我们的报告。 每个页面都有多个图表和一些文本。

在报告数据中,有100多个地点,每个地点都有一个密度。 我们的想法是将这些点绘制在地图上,其颜色(红色的阴影)代表该地点的密度。

然而,我不理解ax.scatter调用中的kwargs : c和cmap之间的联系,也不理解color.Normalize在这个应用中的作用。

import pandas as pd
import matplotlib
import numpy as np
from pandas import Series, DataFrame
import csv
from scipy import stats
import matplotlib.pyplot as plt
import random
import matplotlib.colors as colors
# Get the data and transform
data = pd.read_csv('logHistThis.csv')
data.drop('Unnamed: 0', axis=1, inplace=True)
dataMean = data['Density'].mean()
data = list(data['Density'])
# I was under the impresion that the data for the colormap
# had to be between 1 and 0 so did this:
aColorScale = []
def myColorScale(theData):
    aColorScale = []
    for x in theData:
        this = x/100
        aColorScale.append(this)
    return aColorScale
aColorScale = myColorScale(data)
estimated_mu, estimated_sigma = stats.norm.fit(data)
xmin = min(data)
xmax = max(data)
x = np.linspace(xmin, xmax, 100)
pdf = stats.norm.pdf(x, loc=estimated_mu, scale=estimated_sigma)
thisRangeMin = np.log(27)
thisRangeMax = np.log(35)
q = [np.random.choice(data, 40)]
z = [ np.random.randint(1, 50, size=40)]
s = 100 *q
colormap = 'Reds'
normalize =matplotlib.colors.Normalize(vmin=xmin, vmax=xmax)
#plt.scatter(x,y,z,s=5, cmap=colormap, norm=normalize, marker='*')
fig = plt.figure(figsize=(10, 5), frameon=False, edgecolor='000000', linewidth = 1)
rect0 = .05, .05, .4, .9
rect1 = .5, .05, .4, .9
# This works great 
ax1 = fig.add_axes(rect0)#<-----------x2TopTenSummary
ax1.hist(data, bins=13, normed=True, color='c', alpha=0.05)
#ax1.fill_between(x, pdf, where=(), alpha=.2)
ax1.fill_between(x, pdf, where=((x <  thisRangeMax) & ( x > thisRangeMin)), alpha=.2, label='City Range')
ax1.vlines(dataMean, 0,  stats.norm.pdf(dataMean, loc=estimated_mu, scale=estimated_sigma), color='r')
ax1.plot(x, pdf, 'k')
# This does not work :
# It just gives blue dots
ax2= fig.add_axes(rect1)
ax2= fig.add_axes(rect1)
ax2.scatter(q,z, s=200,  cmap= 'Reds',norm=matplotlib.colors.Normalize(vmin=min(aColorScale) , vmax=max(aColorScale)))
# Tried to set the color map in a variety of ways:
# When kwarg 'c' is set to the variable 'aColorScale' i get the error
plt.show()
plt.close()

因此,我的问题是,我们如何在这种应用中纳入彩色地图?

Multiple axes on a figure with a predetermined size (A4 or letter). The color determination is a third variable z, (not x or y) The color determinant is a float where 0 < z < 8 the call is ax not plt

我对文档中的应用描述并不清楚。

the doc for 轴.散点 the doc for 颜色.归一化

我见过很多例子,图中只有一个轴,而调用的是plt.scatter...,例如here

在我们的例子中,x、y将是经度、纬度,变量是'data',是0到8之间的浮点数的列表或数组。

1 个评论
我没有降权,但我想别人降权的原因很明显:你没有提供一个 最低限度的可重复的例子 的问题(代码无法运行,而且太长)。第二,问题实际上没有变得清晰。仅仅说你不理解文档并不能让任何人给你一个答案。如果你在理解上有问题,请说明你 do 首先理解,然后尝试解释你的 don't (虽然第二点有时可能确实很难,但第一点是相当容易的,你完全忽略了这一点)。
python
matplotlib
plot
scatter-plot
Roger Erismann
Roger Erismann
发布于 2017-08-14
2 个回答
Roger Erismann
Roger Erismann
发布于 2017-08-15
已采纳
0 人赞同

好吧,答案来自于2017年PyCon以色列大会,在 this Tamir Lousky的文件。

数据的归一化和与彩图的关联就发生在这里的这段代码中。

aColorScale = data
aColorScale = np.array(aColorScale)
norm = (aColorScale - aColorScale.min())/(aColorScale.max() - aColorScale.min())
cmap= plt.get_cmap('Reds')
colors = [cmap(tl) for tl in norm]#<---- thisRightHere

然后颜色被送入ax2。

ax2= fig.add_axes(rect1)
ax2.scatter(q,z, s=200, color = colors)

我希望那些给我的问题降权的人能够说说为什么,我花了几个小时的时间搜索并试图找到这个问题。

总之,这是最后的图像。

ImportanceOfBeingErnest
ImportanceOfBeingErnest
发布于 2017-08-15
0 人赞同