我想不使用点或像素而是使用绘图单位来指定散点大小。以下面为例:
import matplotlib.pyplot as plt
x = [0]
y = [0]
plt.scatter(x,y)
plt.show()
这会产生如下图:
比如说,如果我希望标记的半径恰好为 0.002 个绘图单位,该怎么办?我明白了s
参数表示标记大小的区域(以磅为单位)。有没有办法直接以绘图单位提供它?如果不是,从绘图单位转换为点的最佳方法是什么,以便我可以将其传递到s
范围?
我还看到了其他一些建议使用PatchCollection
并简单地绘制一个具有指定半径的圆。我不想使用这种方法。我想避免广泛重写现有代码,而是使用s
参数连同plt.scatter
.
Edit
我尝试使用来自的代码这个问题这显然允许您根据绘图单位控制标记大小。但是我无法真正让它适用于我的基本情况:
import matplotlib.pyplot as plt
import numpy as np
class scatter():
def __init__(self,x,y,ax,size=1,**kwargs):
self.n = len(x)
self.ax = ax
self.ax.figure.canvas.draw()
self.size_data=size
self.size = size
self.sc = ax.scatter(x,y,s=self.size,**kwargs)
self._resize()
self.cid = ax.figure.canvas.mpl_connect('draw_event', self._resize)
def _resize(self,event=None):
ppd=72./self.ax.figure.dpi
trans = self.ax.transData.transform
s = ((trans((1,self.size_data))-trans((0,0)))*ppd)[1]
if s != self.size:
self.sc.set_sizes(s**2*np.ones(self.n))
self.size = s
self._redraw_later()
def _redraw_later(self):
self.timer = self.ax.figure.canvas.new_timer(interval=10)
self.timer.single_shot = True
self.timer.add_callback(lambda : self.ax.figure.canvas.draw_idle())
self.timer.start()
x = [0]
y = [0]
fig = plt.figure()
ax = fig.gca()
size = 3.14*0.002**2
scatter(x, y, ax, size = 0.002, edgecolors = 'black')
ax.set_ylim(-0.004, 0.004)
ax.set_xlim(-0.004, 0.004)
ax.scatter(x,y)
ax.grid()
plt.show()
以上输出如下图:
正如我在中所示,它看起来不像 0.002 的大小scatter(x, y, ax, size = 0.002, edgecolors = 'black')
。我不确定我在这里做错了什么。