我有一些几何分布的数据.当我想看一下时,我会用
sns.distplot(data, kde=False, norm_hist=True, bins=100)
Run Code Online (Sandbox Code Playgroud)
结果是一张图片:
但是,箱柜高度不等于1,这意味着y轴不显示概率,它是不同的.相反,我们使用
weights = np.ones_like(np.array(data))/float(len(np.array(data)))
plt.hist(data, weights=weights, bins = 100)
Run Code Online (Sandbox Code Playgroud)
y轴应显示概率,因为箱高度总和为1:
这里可以更清楚地看到:假设我们有一个列表
l = [1, 3, 2, 1, 3]
Run Code Online (Sandbox Code Playgroud)
我们有两个1,两个3和一个2,所以它们各自的概率是2/5,2/5和1/5.当我们使用带有3个箱子的seaborn histplot时:
sns.distplot(l, kde=False, norm_hist=True, bins=3)
Run Code Online (Sandbox Code Playgroud)
我们得到:
如您所见,第1和第3个bin总和达到0.6 + 0.6 = 1.2,已经大于1,因此y轴不是概率.当我们使用
weights = np.ones_like(np.array(l))/float(len(np.array(l)))
plt.hist(l, weights=weights, bins = 3)
Run Code Online (Sandbox Code Playgroud)
我们得到:
并且y轴是概率,如预期的那样为0.4 + 0.4 + 0.2 = 1.
对于每种情况下使用的两种方法,这两种情况中的箱的数量是相同的:对于几何分布的数据,100个箱,对于具有3个可能值的小阵列l,3个箱.所以箱子数量不是问题.
我的问题是:在用norm_hist = True调用的seaborn distplot中,y轴是什么意思?
我想一个动画pcolormesh在matplotlib.我见过许多使用包动画的例子,其中大多数使用一维绘图例程,其中一些使用imshow().首先,我想使用FuncAnimation routine.我的问题是,首先,我不知道我是否可以初始化情节
fig,ax = plt.subplots()
quad = ax.pcolormesh(X,Y,Z)
Run Code Online (Sandbox Code Playgroud)
我尝试了几个简单的行:
fig,ax = plt.subplots()
quad = ax.pcolormesh([])
def init():
quad.set_array([])
return quad,
def animate(ktime):
quad.set_array(X,Y,np.sin(Z)+ktime)
return quad,
anim = animation.FuncAnimation(fig,animate,init_func=init,frames=Ntime,interval=200,blit=True)
plt.show()
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如何设置标签和动画情节?如果标题显示的是时间变化的数字,我可以为标题设置动画吗?谢谢
我有一个带线条的动画,现在我想标记点数.我尝试plt.annotate()过plt.text()但我试过但是实验室不动了.这是我的示例代码:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def update_line(num, data, line):
newData = np.array([[1+num,2+num/2,3,4-num/4,5+num],[7,4,9+num/3,2,3]])
line.set_data(newData)
plt.annotate('A0', xy=(newData[0][0],newData[1][0]))
return line,
fig1 = plt.figure()
data = np.array([[1,2,3,4,5],[7,4,9,2,3]])
l, = plt.plot([], [], 'r-')
plt.xlim(0, 20)
plt.ylim(0, 20)
plt.annotate('A0', xy=(data[0][0], data[1][0]))
# plt.text( data[0][0], data[1][0], 'A0')
line_ani = animation.FuncAnimation(fig1, update_line, 25, fargs=(data, l),
interval=200, blit=True)
plt.show()
Run Code Online (Sandbox Code Playgroud)
你能帮我吗?
我的下一步是:我有这些点的起源向量.这些向量在每个动画步骤中改变它们的长度和方向.我该如何为这些动画制作动画?
没有动画,这有效:
soa =np.array( [ [data[0][0],data[1][0],F_A0[i][0][0],F_A0[i][1][0]],
[data[0][1],data[1][1],F_B0[i][0][0],F_B0[i][1][0]],
[data[0][2],data[1][2],F_D[i][0][0],F_D[i][1][0]] ])
X,Y,U,V = zip(*soa)
ax = plt.gca()
ax.quiver(X,Y,U,V,angles='xy',scale_units='xy',scale=1)
Run Code Online (Sandbox Code Playgroud)
首先,非常感谢您快速而有用的答案! …
我试图在 a 上绘制 1x1 度数据matplotlib.Basemap,并且我想用白色填充海洋。但是,为了让海洋的边界遵循 绘制的海岸线matplotlib,白色海洋掩膜的分辨率应该比我的数据分辨率高很多。
搜索了很长时间后,我尝试了两种可能的解决方案:
(1)maskoceans()和is_land()函数,但由于我的数据分辨率低于底图绘制的地图,因此边缘看起来不太好。我也不想将我的数据插入到更高分辨率。
(2) m.drawlsmask(),但由于无法分配 zorder ,因此 pcolormesh 图始终覆盖掩码。
这段代码
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.basemap as bm
#Make data
lon = np.arange(0,360,1)
lat = np.arange(-90,91,1)
data = np.random.rand(len(lat),len(lon))
#Draw map
plt.figure()
m = bm.Basemap(resolution='i',projection='laea', width=1500000, height=2900000, lat_ts=60, lat_0=72, lon_0=319)
m.drawcoastlines(linewidth=1, color='white')
data, lon = bm.addcyclic(data,lon)
x,y = m(*np.meshgrid(lon,lat))
plt.pcolormesh(x,y,data)
plt.savefig('1.png',dpi=300)
Run Code Online (Sandbox Code Playgroud)
添加m.fillcontinents(color='white')产生以下图像,这是我需要的,但要填充海洋而不是陆地。

编辑:
m.drawmapboundary(fill_color='lightblue') 也会填满土地,因此无法使用。
理想的结果是海洋是白色的,而我所绘制的则plt.pcolormesh(x,y,data)显示在陆地上。
我想绘制一个带有标签的散点图。但是,这些标签是重叠的。如何增强外观,以便更好地查看数字?另外,我的数字是整数,但它以浮点数显示标签值。我想知道为什么。
期待收到您的回音。
这是我的代码:
col = df['type'].map({'a':'r', 'b':'b', 'c':'y'})
ax = df.plot.scatter(x='x', y='y', c=col)
df[['x','y','id']].apply(lambda x: ax.text(*x),axis=1)
Run Code Online (Sandbox Code Playgroud)
我试图用来numba加速一个以另一个函数作为参数的函数。一个最小的例子如下:
import numba as nb
def f(x):
return x*x
@nb.jit(nopython=True)
def call_func(func,x):
return func(x)
if __name__ == '__main__':
print(call_func(f,5))
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用,因为显然numba不知道如何处理该函数参数。回溯很长:
Traceback (most recent call last):
File "numba_function.py", line 15, in <module>
print(call_func(f,5))
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numba/dispatcher.py", line 330, in _compile_for_args
raise e
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numba/dispatcher.py", line 307, in _compile_for_args
return self.compile(tuple(argtypes))
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numba/dispatcher.py", line 579, in compile
cres = self._compiler.compile(args, return_type)
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numba/dispatcher.py", line 80, in compile
flags=flags, locals=self.locals)
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numba/compiler.py", line 740, in compile_extra
return pipeline.compile_extra(func)
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numba/compiler.py", …Run Code Online (Sandbox Code Playgroud) 我正在使用Python和numpy做线性代数.
我进行了numpy一个矩阵SVD得到矩阵U,I,和V.然而,我矩阵表达为具有1行1×4矩阵.即:[ 12.22151125 4.92815942 2.06380839 0.29766152].
我如何能够将i矩阵表示为对角矩阵,如下所示:
[[12.22151125, 0, 0, 0],[0,4.92815942, 0, 0],[0,0,2.06380839,0 ],[0,0,0,0.29766152]]
我正在使用的代码:
A = np.matrix([[3, 4, 3, 1],[1,3,2,6],[2,4,1,5],[3,3,5,2]])
U, i, V = np.linalg.svd(A,full_matrices=True)
Run Code Online (Sandbox Code Playgroud)
所以我希望我成为一个完整的对角矩阵.我是怎么做到的?
我在玩Python及其matplotlib库,如何创建以下图表,以使第一个切片从顶部开始并向右(顺时针)移动,而不是向左(逆时针)移动:
码:
import matplotlib.pyplot as plt
import re
import math
# The slices will be ordered and plotted counter-clockwise if startangle=90.
sizes = [175, 50, 25, 50]
total = sum(sizes)
print('TOTAL:')
print(total)
print('')
percentages = list(map(lambda x: str((x/(total * 1.00)) * 100) + '%', sizes))
print('PERCENTAGES:')
print(percentages)
backToFloat = list(map(lambda x: float(re.sub("%$", "", x)), percentages))
print('')
print('PERCENTAGES BACK TO FLOAT:')
print(backToFloat)
print('')
print('SUM OF PERCENTAGES')
print(str(sum(backToFloat)))
print('')
labels = percentages
colors = ['blue', 'red', 'green', 'orange']
patches, texts …Run Code Online (Sandbox Code Playgroud) 我使用以下代码绘制了非常小的值的比较条形图,
import pandas as pd
import matplotlib.pyplot as plt
data = [[ 0.00790019035339353, 0.00002112],
[0.0107705593109131, 0.0000328540802001953],
[0.0507792949676514, 0.0000541210174560547]]
df = pd.DataFrame(data, columns=['A', 'B'])
df.plot.bar()
plt.bar(df['A'], df['B'])
plt.show()
Run Code Online (Sandbox Code Playgroud)
由于值非常小,我无法可视化图表中较小值(例如 0.00002112)(“B”列)的图表颜色。
如何修改代码以可视化图表中较小的值(B 列)颜色?谢谢..
在尝试回答一个旧的未解决的问题时,我遇到了一个有关文本批注的小问题matplotlib:在将旋转的文本添加到图形的某个位置时,文本相对于文本的边界框对齐,而不是相对于(虚构的)对齐包含文本本身的旋转框。最好用一个小例子来解释一下:

该图显示了具有不同旋转角度和不同对齐选项的文本。对于每个文本对象,红点表示赋予该ax.text()功能的坐标。蓝色框是围绕文本的旋转框架,黑色框是文本的近似边界框(有点太大,但是应该可以理解)。很容易看出,对于对齐位于边缘(左,右,顶部,底部)的情况,红点位于边界框的侧面或边缘,而不是文本框。唯一以直观方式对齐文本的对齐方式是将水平和垂直对齐方式都设置为“居中”。现在,这不是错误,而是此处概述的预期行为。但是,在某些情况下,它不是很实用,因为必须“手动”调整位置以使文本位于所需位置,并且如果旋转角度发生更改或图形重新缩放,此调整也会更改。
问题是,是否存在一种可靠的方式来生成与文本框架而不是边界框对齐的文本。我已经有解决该问题的方法,但是要弄清楚这很繁琐,所以我想与您分享。
我有一个1D DataFrame,用表格的键索引i_n,其中i和n是字符串(为了这个例子,i是一个整数,n是一个字符).这将是一个简单的例子:
values
0_a 0.583772
1_a 0.782358
2_a 0.766844
3_a 0.072565
4_a 0.576667
0_b 0.503876
1_b 0.352815
2_b 0.512834
3_b 0.070908
4_b 0.074875
0_c 0.361226
1_c 0.526089
2_c 0.299183
3_c 0.895878
4_c 0.874512
Run Code Online (Sandbox Code Playgroud)
现在我想重新安排这个DataFrame为2D,使得数字(下划线之前的索引名称部分)用作列名,字符(下划线后面的索引部分)用作索引:
0 1 2 3 4
a 0.583772 0.782358 0.766844 0.0725654 0.576667
b 0.503876 0.352815 0.512834 0.0709081 0.0748752
c 0.361226 0.526089 0.299183 0.895878 0.874512
Run Code Online (Sandbox Code Playgroud)
我有一个问题的解决方案(convert_2d下面的函数),但我想知道,是否会有一个更惯用的方法来实现这一点.这里是用于生成原始DataFrame并将其转换为所需形式的代码:
import pandas as pd
import numpy as np
def convert_2d(df): …Run Code Online (Sandbox Code Playgroud) 我有一个按钮(B),其功能应取决于其他按钮的单击.假设我有3个可靠的按钮(b1,b2,b3),通过点击它可以改变背景.我使用以下命令为3个按钮更改背景颜色.
B = Button(frame, image=logo, command=data)
b1 = Button(frame, text = "v", command=lambda:b1.config(bg="gray))
b2 = Button(frame, text = "v", command=lambda:b2.config(bg="gray))
b3 = Button(frame, text = "v", command=lambda:b3.config(bg="gray))
Run Code Online (Sandbox Code Playgroud)
因此,当我单击按钮时,背景颜色变为灰色.但是,我想一次只做一个按钮.因此,当我单击一个按钮时,我想将其他按钮更改为前景.通过使用背景颜色,我想编写按钮B命令功能.
我尝试如下,但它没有按我的意愿工作:
def data():
if b1.configure(bg="gray):
data1()
if b2.configure(bg="gray):
data2()
if b3.configure(bg="gray):
data3()
else:
print('no data')
def data1():
as per my requirement
def data2():
as per my requirement
def data3():
as per my requirement
Run Code Online (Sandbox Code Playgroud)
但是,尽管点击按钮,我仍然没有数据.
很高兴听到一些建议.
python ×12
matplotlib ×8
python-3.x ×3
animation ×2
pandas ×2
annotations ×1
mask ×1
matrix ×1
numba ×1
numpy ×1
pie-chart ×1
scatter ×1
seaborn ×1
tkinter ×1