我有一组数据要显示为散点图 . 我希望将每个点绘制为大小为 dx
的正方形 .
x = [0.5,0.1,0.3]
y = [0.2,0.7,0.8]
z = [10.,15.,12.]
dx = [0.05,0.2,0.1]
scatter(x,y,c=z,s=dx,marker='s')
问题是分散函数读取的大小 s
在点^ 2中 . 我'd like is having each point represented by a square of area dx^2, where this area is in '真正的'单位,情节单位 . 我希望你能明白这一点 .
我还有另一个问题 . 散点函数用黑色边框绘制标记,如何删除此选项并且根本没有边框?
4 回答
从 user data 坐标系转换为 display 坐标系 .
并使用edgecolors ='none'绘制没有轮廓的面 .
如果您想要使用图形大小调整大小的标记,可以使用修补程序:
注意:
方块不以
(x,y)
为中心 . x,y实际上是左下方的坐标 . 我这样简化我的代码 . 你应该使用(x + dx/2, y + dx/2)
.颜色来自热色图 . 我用z ** 2来给出颜色 . 你也应该根据自己的需要进行调整
最后是你的第二个问题 . 您可以使用关键字参数
edgecolor
或edgecolors
来获取散点图的边框 . 它们分别是matplotlib颜色参数或rgba元组序列 . 如果将参数设置为'None',则不绘制边框 .我想我们可以通过一系列补丁来做得更好 . 根据文件:
假设您要在数据单元中绘制给定半径的圆的散布:
scatter
函数的所有参数和关键字(除了marker
)都可以以类似的方式工作 . 我写了gist,包括 circles , ellipses 和 squares / rectangles . 如果你想要一个其他形状的集合,你可以自己修改它 .如果要绘制颜色条,只需运行
colorbar()
或将返回的集合对象传递给colorbar
函数 .一个例子:
输出:
为了使Python 3兼容,我添加了以下代码片段
从
How to check if variable is string with python 2 and 3 compatibility
这是必要的,因为_3302266_在Python 3中不可用 . 在Python 2中,
basestring
的目的是包括str
和unicode
. 在Python 3中,str
和unicode
之间没有区别,它只是str
.