如何获取数字NUM的matplotlib rgb值,给定:
在我的例子中,我想:
下面的代码显示了colormap的用法并定义了我的边界值.现在我只需要一个函数来返回我的rgb值而不是散点图.散点图仅用于可视化,因此我可以看到规范化正如我所希望的那样工作.
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib import cm
import numpy as np
import copy
# setup the plot
fig, ax = plt.subplots(1,1, figsize=(6,6))
# define the data
NUM_VALS = 20
NORM_ENDS = (2,10)
x = np.random.uniform(0, NUM_VALS, size=NUM_VALS)
y = np.random.uniform(0, NUM_VALS, size=NUM_VALS)
tag = copy.deepcopy(y)
# define the colormap
cmap = plt.get_cmap('autumn_r')
cmaplist = [cmap(i) for i in range(cmap.N)]
# create …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 matplotlib (当然还有 numpy)绘制轮廓图。它有效,它绘制了它应该绘制的内容,但不幸的是我无法设置颜色条范围。问题是我有很多图,并且需要所有图都具有相同的颜色条(相同的最小值和最大值,相同的颜色)。我复制并粘贴了在互联网上找到的几乎所有代码片段,但没有成功。到目前为止我的代码:
import numpy as np;
import matplotlib as mpl;
import matplotlib.pyplot as plt;
[...]
plotFreq, plotCoord = np.meshgrid(plotFreqVect, plotCoordVect);
figHandler = plt.figure();
cont_PSD = plt.contourf(plotFreq, plotCoord, plotPxx, 200, linestyle=None);
normi = mpl.colors.Normalize(vmin=-80, vmax=20);
colbar_PSD = plt.colorbar(cont_PSD);
colbar_PSD.set_norm(normi);
#colbar_PSD.norm = normi;
#mpl.colors.Normalize(vmin=-80, vmax=20);
plt.axis([1, 1000, -400, 400]);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,颜色条规范有三种不同的行,但它们都不起作用。范围仍然是自动设置的...我的意思是其他一切都正常,为什么颜色条不行?我什至没有收到错误或警告。
谢谢,itpdg
编辑1:图片,与plt.clim(-80,20):
我最近正在阅读一个开源项目的源代码。当程序员想要将行向量转换array([0, 1, 2])为列向量时array([[0], [1], [2]]),np.reshape(x, (-1,1))使用 , 。在评论中,它说 reshape 是必要的,以保持数据连续性[:, np.newaxis],而不是没有。
我尝试了这两种方法,似乎它们会返回相同的结果。那么这里的数据连续性保留是什么意思呢?
假设我有一个数组:adata=array([0.5, 1.,2.,3.,6.,10.])并且我想计算这个数组的威布尔分布的对数似然,给定参数[5.,1.5]和[5.1,1.6]。我从没想过我需要为此任务编写自己的威布尔概率密度函数,因为它已经在scipy.stat.distributions. 所以,这应该这样做:
from scipy import stats
from numpy import *
adata=array([0.5, 1.,2.,3.,6.,10.])
def wb2LL(p, x): #log-likelihood of 2 parameter Weibull distribution
return sum(log(stats.weibull_min.pdf(x, p[1], 0., p[0])), axis=1)
Run Code Online (Sandbox Code Playgroud)
和:
>>> wb2LL(array([[5.,1.5],[5.1,1.6]]).T[...,newaxis], adata)
array([-14.43743911, -14.68835298])
Run Code Online (Sandbox Code Playgroud)
或者我重新发明轮子并编写一个新的 Weibull pdf 函数,例如:
wbp=lambda p, x: p[1]/p[0]*((x/p[0])**(p[1]-1))*exp(-((x/p[0])**p[1]))
def wb2LL1(p, x): #log-likelihood of 2 paramter Weibull
return sum(log(wbp(p,x)), axis=1)
Run Code Online (Sandbox Code Playgroud)
和:
>>> wb2LL1(array([[5.,1.5],[5.1,1.6]]).T[...,newaxis], adata)
array([-14.43743911, -14.68835298])
Run Code Online (Sandbox Code Playgroud)
诚然,我总是理所当然地认为,如果某些东西已经在scipy. 但令人惊讶的是:如果 I timeit100000 次调用wb2LL1(array([[5.,1.5],[5.1,1.6]])[...,newaxis], adata)需要 2.156 秒,而 …
这是一种有效或正确的方法,可以将每列中的每个单元格除以表中该列中的最大值吗?是否有更好的实施(如果这是正确的)?注意:所有值> = 0
new_data = [];
for row in np.transpose(data)[1::]: #from 1 till end
for elements in row:
if sum(elements) != 0:
new_data.append(elements/max(row));
else:
new_data.append(0);
new_data = np.transpose(new_data);
Run Code Online (Sandbox Code Playgroud)
现在:
id col1 col2 col3 col4
A 2 1 4 0
B 3 8 2 0
C 2 3 0 0
D 5 5 3 0
E 6 3 3 0
Run Code Online (Sandbox Code Playgroud)
需要:
id col1 col2 col3 col4
A 1/3 1/8 1 0
B 1/2 1 1/2 0
C 1/3 3/8 0 0 …Run Code Online (Sandbox Code Playgroud) 我正在进行一些数据分析,包括将数据集拟合到广义极值(GEV)分布,但我得到了一些奇怪的结果.这是我正在做的事情:
from scipy.stats import genextreme as gev
import numpy
data = [1.47, 0.02, 0.3, 0.01, 0.01, 0.02, 0.02, 0.12, 0.38, 0.02, 0.15, 0.01, 0.3, 0.24, 0.01, 0.05, 0.01, 0.0, 0.06, 0.01, 0.01, 0.0, 0.05, 0.0, 0.09, 0.03, 0.22, 0.0, 0.1, 0.0]
x = numpy.linspace(0, 2, 20)
pdf = gev.pdf(x, *gev.fit(data))
print(pdf)
Run Code Online (Sandbox Code Playgroud)
并输出:
array([ 5.64759709e+05, 2.41090345e+00, 1.16591714e+00,
7.60085002e-01, 5.60415578e-01, 4.42145248e-01,
3.64144425e-01, 3.08947114e-01, 2.67889183e-01,
2.36190826e-01, 2.11002185e-01, 1.90520108e-01,
1.73548832e-01, 1.59264573e-01, 1.47081601e-01,
1.36572220e-01, 1.27416958e-01, 1.19372442e-01,
1.12250072e-01, 1.05901466e-01, 1.00208313e-01,
9.50751375e-02, 9.04240603e-02, 8.61909342e-02,
8.23224528e-02, 7.87739599e-02, 7.55077677e-02, …Run Code Online (Sandbox Code Playgroud) 我有一个csv文件中的数据结构如下:
Subject group Result1 Result2... ResultN
101 a .5 .1 .2
103 b .1 .2 .5
104 b .2 .3 .4
mean_a a .5 .1 .2
mean_b b .1 .6 .4
ste_a a .05 .02 .03
ste_b b .01 .05 .04
Run Code Online (Sandbox Code Playgroud)
我只想得到一个条形图,按结果分组,每组的平均行值,其中ste为误差条.不幸的是,我很难这样做.我可以将数据帧转换为两个独立的数据帧,一个用于均值,一个用于ste,如下所示:
a b
Result1 .5 .1
Result2 .1 .6
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何绘制stes的第二个数据帧作为错误条,我的方法似乎过于复杂,所以我想知道是否有人知道更简单的方法来做到这一点,如果没有,如何使用一个数据帧绘制其他数据帧的误差线.
我正在将numpy稀疏数组(已删除)保存到csv中.结果是我有一个3GB的csv.问题是95%的细胞是0.0000.我用过fmt='%5.4f'.如何格式化和保存,使零保存为0,非零浮点数以'%5.4f'格式保存?如果我能做到这一点,我相信我可以将3GB降至300MB.
我在用
np.savetxt('foo.csv', arrayDense, fmt='%5.4f', delimiter = ',')
Run Code Online (Sandbox Code Playgroud)
感谢和问候
Anderson函数仅询问一个参数,该参数应为一维数组。所以我想知道如何通过两个不同的数组进行比较吗?谢谢
自从更新到 matplotlib 1.5.0 以来,
matplotlib.animation.FuncAnimation(fig, func, init_func=func,
frames=frames,
interval=1100,repeat_delay=2000,
blit=True)
Run Code Online (Sandbox Code Playgroud)
结果是
AttributeError:“NoneType”对象没有属性“set_animated”
在 matplotlib/animation.py 的第 1134 行,即
TimedAnimation.__init__(self, fig, **kwargs)
Run Code Online (Sandbox Code Playgroud)
我需要进行设置blit=False才能继续而不会出现错误。
无论我如何更改 、 等的值,都会发生这种情况fig,func无论如何,这些值在 1.5.0 之前都工作正常。
1.5.0 中是否有更改导致此问题?我可以继续做些什么吗blit=True?
python ×10
numpy ×5
matplotlib ×4
scipy ×3
statistics ×2
chi-squared ×1
colorbar ×1
colormap ×1
contourf ×1
pandas ×1
performance ×1
plot ×1
python-2.7 ×1
rgb ×1
statsmodels ×1
weibull ×1