Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib-创建一个散点图,其中包含填充可用空间的点_Python_Matplotlib_Plot_Customization - Fatal编程技术网

Python Matplotlib-创建一个散点图,其中包含填充可用空间的点

Python Matplotlib-创建一个散点图,其中包含填充可用空间的点,python,matplotlib,plot,customization,Python,Matplotlib,Plot,Customization,我可以创建散点图,如下所示: fig,ax=plt.subplot() x1=[1,1,2] y1=[1,2,1] x2=[2] y2=[2] 最大散射(x1,y1,color=“red”,s=500) 最大散射(x2,y2,color=“blue”,s=500) 给 我想要的是以下内容(为拙劣的油漆工作道歉): 我绘制的数据都是整数值,所以它们都在一个网格上。我希望能够控制散射标记的大小,以便在点周围有空白,或者我可以使点足够大,使其周围没有空白(正如我在上面的绘制图像中所做的那样) 注

我可以创建散点图,如下所示:

fig,ax=plt.subplot()
x1=[1,1,2]
y1=[1,2,1]
x2=[2]
y2=[2]
最大散射(x1,y1,color=“red”,s=500)
最大散射(x2,y2,color=“blue”,s=500)

我想要的是以下内容(为拙劣的油漆工作道歉):

我绘制的数据都是整数值,所以它们都在一个网格上。我希望能够控制散射标记的大小,以便在点周围有空白,或者我可以使点足够大,使其周围没有空白(正如我在上面的绘制图像中所做的那样)

注意-理想情况下,解决方案将使用纯matplotlib,使用文档中建议的OOP接口

import matplotlib.pyplot as plt
import matplotlib as mpl

# X and Y coordinates for red circles
red_xs = [1,2,3,4,1,2,3,4,1,2,1,2]
red_ys = [1,1,1,1,2,2,2,2,3,3,4,4]

# X and Y coordinates for blue circles
blu_xs = [3,4,3,4]
blu_ys = [3,3,4,4]

# Plot with a small markersize
markersize = 5
fig, ax = plt.subplots(figsize=(3,3))
ax.plot(red_xs, red_ys, marker="o", color="r", linestyle="", markersize=markersize)
ax.plot(blu_xs, blu_ys, marker="o", color="b", linestyle="", markersize=markersize)
plt.show()


一个混淆可能是点的大小用“显示坐标”表示,而点之间的间距用“数据坐标”表示。因此,每当x轴或y轴的极限发生变化(例如,添加更多点)或绘图变大时,它们的关系都会发生变化。给出了一些额外的解释。检查一个混淆可能是点的大小用“显示坐标”表示,而点之间的间距用“数据坐标”表示。因此,每当x轴或y轴的极限发生变化(例如,添加更多点)或绘图变大时,它们的关系都会发生变化。给出了一些额外的解释。请检查“谢谢”-如何设置大小,使点足够大,因此点之间没有空格,点之间没有重叠。@baxx查看更新的解决方案。根据您在原始问题中的要求,我尝试尽可能少地使用面向对象接口。谢谢-但在我的原始问题中,它说我确实想使用OOP接口,而不是说我不想。尽管补丁解决方案看起来不错,这似乎是最好的方法谢谢-如何设置大小,使点足够大,因此点之间没有空格,点之间没有重叠。@baxx查看更新的解决方案。根据您在原始问题中的要求,我尝试尽可能少地使用面向对象的接口。谢谢-但在我的原始问题中,它说我确实想使用OOP接口,而不是说我不想。不过补丁解决方案看起来不错,这似乎是最好的方法
# Plot with a large markersize
markersize = 50
fig, ax = plt.subplots(figsize=(3,3))
ax.plot(red_xs, red_ys, marker="o", color="r", linestyle="", markersize=markersize)
ax.plot(blu_xs, blu_ys, marker="o", color="b", linestyle="", markersize=markersize)
plt.show()
# Plot with using patches and radius
r = 0.5
fig, ax = plt.subplots(figsize=(3,3))
for x, y in zip(red_xs, red_ys):
    ax.add_patch(mpl.patches.Circle((x,y), radius=r, color="r"))
for x, y in zip(blu_xs, blu_ys):
    ax.add_patch(mpl.patches.Circle((x,y), radius=r, color="b"))
ax.autoscale()
plt.show()