这是一个相当具体的要求,但我想知道是否有人对此特定问题有解决方案。当一个图包含一个颜色条时,似乎Matplotlib试图将颜色条和图本身都挤压到一个正方形的边界框中。有没有办法让图本身恰好保持您想要的尺寸(理想的长宽比为1),同时又保留一个颜色栏?有一种聪明的方法可以使您不必猜测和检查吗?

代码如下:
plt.figure(figsize=(8,8))
props = dict(boxstyle='round', facecolor='#C0C0C0', alpha=1)
plt.hexbin(p_binned[7],q_binned[7],extent=(0,1,0,1),gridsize=50,cmap='bone')
plt.colorbar()
text_content = "{:1.3f} ".format(bins[7]/r200_MediumMass2)
plt.text(0.05, 0.95, text_content + r"$r/r_{200}$", fontsize=16, verticalalignment='top', bbox=props)
plt.xlabel('p')
plt.ylabel('q',rotation='horizontal')
plt.ylim(0,1)
plt.xlim(0,1)
plt.show()
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在尝试使用Matplotlib的2d散点图函数绘制一些数据,同时在x和y轴上生成投影直方图.我发现的例子来自matplotlib图片库(pylab_examples示例代码:scatter_hist.py).
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import NullFormatter
# the random data
x = np.random.randn(1000)
y = np.random.randn(1000)
nullfmt = NullFormatter() # no labels
# definitions for the axes
left, width = 0.1, 0.65
bottom, height = 0.1, 0.65
bottom_h = left_h = left+width+0.02
rect_scatter = [left, bottom, width, height]
rect_histx = [left, bottom_h, width, 0.2]
rect_histy = [left_h, bottom, 0.2, height]
# start with a rectangular Figure
plt.figure(1, figsize=(8,8))
axScatter = plt.axes(rect_scatter) …Run Code Online (Sandbox Code Playgroud) 我跑称为聚类算法MeanShift()中sklearn.cluster模块(这里的文档)。我正在处理的对象有 310,057 个点分布在 3 维空间中。我运行它的计算机总共有 128Gb 的内存,所以当我收到以下错误时,我很难相信我实际上正在使用所有内存。
[user@host ~]$ python meanshifttest.py
Traceback (most recent call last):
File "meanshifttest.py", line 13, in <module>
ms = MeanShift().fit(X)
File "/home/user/anaconda/lib/python2.7/site-packages/sklearn/cluster/mean_shift_.py", line 280, in fit
cluster_all=self.cluster_all)
File "/home/user/anaconda/lib/python2.7/site-packages/sklearn/cluster/mean_shift_.py", line 99, in mean_shift
bandwidth = estimate_bandwidth(X)
File "/home/user/anaconda/lib/python2.7/site-packages/sklearn/cluster/mean_shift_.py", line 45, in estimate_bandwidth
d, _ = nbrs.kneighbors(X, return_distance=True)
File "/home/user/anaconda/lib/python2.7/site-packages/sklearn/neighbors/base.py", line 313, in kneighbors
return_distance=return_distance)
File "binary_tree.pxi", line 1313, in sklearn.neighbors.kd_tree.BinaryTree.query (sklearn/neighbors/kd_tree.c:10007)
File "binary_tree.pxi", line 595, in sklearn.neighbors.kd_tree.NeighborsHeap.__init__ (sklearn/neighbors/kd_tree.c:4709)
MemoryError …Run Code Online (Sandbox Code Playgroud) 我有一种情况,我不一定知道如何格式化一些字符串,直到我计算了其他数字的长度.
做类似的事情:
"{0:.2f}".format(#)
Run Code Online (Sandbox Code Playgroud)
效果很好,因为我知道我想要显示那么多的地方,在这种情况下,两个小数点.如果地点数量有变化怎么办?如何从名为A的列表的相应元素中对名为B的列表的元素进行动态字符串格式化(我想将B的适当格式化元素放入字符串中)?
A = ['1.100','5.4','11.1','7']
B = [1.23474927,4.92837087,12.06532387,6.9998123]
Run Code Online (Sandbox Code Playgroud)
我希望看到的答案如下:
C = ['1.235','4.9','12.1','7']
Run Code Online (Sandbox Code Playgroud)
这是我目前所知道的:
1)我可以通过以下方式计算A中每个字符串右边的多少个位置:
places_A = [len(A[i].partition('.')[2]) for i in range(len(A)]
Run Code Online (Sandbox Code Playgroud)
真正的问题是:我如何动态告诉format()以保持小数点右边的那么多位置?
我正在尝试创建2D高斯函数的简单imshow()图(matplotlib v.1.2.1):
import matplotlib.pyplot as plt
import numpy as np
from pylab import *
def gaussian(x,y,stdx,stdy):
return 1.0/(2*np.pi*stdx*stdy) * (np.exp(-0.5*(x**2/stdx**2 + y**2/stdy**2)))
coords = np.linspace(-1,1,100)
X,Y = np.meshgrid(coords,coords)
std_list = np.linspace(1,2,20)
output = [gaussian(X,Y,std_list[i],std_list[i]) for i in range(len(std_list))]
for i in range(len(output)):
plt.imshow(X,Y,np.array(output[i]),cmap='bone')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Traceback (most recent call last):
File "blur.py", line 14, in <module>
plt.imshow(X,Y,np.array(output[i]),cmap='bone')
TypeError: imshow() got multiple values for keyword argument 'cmap'
Run Code Online (Sandbox Code Playgroud)
事实上,为了确保我没有疯狂,我完全取出了cmap参数,现在我收到以下错误:
Traceback (most recent call last):
File "blur.py", line 14, in <module>
plt.imshow(X,Y,np.array(output[i]))
File …Run Code Online (Sandbox Code Playgroud) 我正在计算c ++中大量(~1e5)粒子数的势能.为了做到这一点,我正在运行一个双循环,我在其中计算成对距离,并从这些距离计算系统的总势能.下面是代码的相关部分(它不是复制/粘贴准备好的,因为需要定义数据,有些东西不在上下文中;方法仍然有效,这就是我在这里要展示的内容) :
int colstart = 2;
int colend = 4;
double PE = 0;
double p_mass = 8.721e9 * 1.989e30; // mass of sim particle in kg
double mpc_to_m = 3.08567758e22; // meters per mpc
double G = 6.67384e-11; // grav. constant in mks units
// Calculating PE
for(int i = 0; i < data.size()-1; i++) // -1 is for empty line at the end of every file
{
//cout << i << " " << data[i].size() << endl; …Run Code Online (Sandbox Code Playgroud) 嗨,我有一个奇怪的问题.我正在转换一个数字列表(代表物理测量),其中每个数据都以任意单位报告给某些指定的准确度,具体取决于它的来源.这是我的意思的一个例子:
[...,105.0,20.0,3.5,4.25,9.78,7.2,7.2]
Run Code Online (Sandbox Code Playgroud)
这些当然是类型:
<type 'numpy.float64'>.
Run Code Online (Sandbox Code Playgroud)
如果我打印出最后一个号码,例如:
print list[-1]
>>> 7.2
Run Code Online (Sandbox Code Playgroud)
但是,如果以这种方式访问,我得到:
7.2000000000000002
Run Code Online (Sandbox Code Playgroud)
我理解浮点数默认为64位,因此使用它们进行计算(即 - 转换此测量列表)会返回64位的转换值.以下是转换值的示例:
[105.27878958,20.0281600192,3.47317185649,4.27596751688,9.82706595042,7.27448290596,7.26291009446]
Run Code Online (Sandbox Code Playgroud)
以任何一种方式访问它们(使用打印与否),返回64位数字.但显然还有其他事情发生,否则打印功能就不会真正知道如何显示真实的测量结果.我想将转换后的值报告为与原始测量值相同的精度.有没有办法在python中做到这一点?
python ×5
matplotlib ×3
numpy ×2
algorithm ×1
c++ ×1
colorbar ×1
energy ×1
histogram ×1
scatter-plot ×1
scikit-learn ×1