Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.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_Julia - Fatal编程技术网

Python 打印和注释中的线型在matplotlib中不相等

Python 打印和注释中的线型在matplotlib中不相等,python,matplotlib,julia,Python,Matplotlib,Julia,我在Julia中使用PyPlot,它基本上依赖于matplotlib。但是,我怀疑Python中的问题是相同的:当我使用相同的linestyle属性plot一行和annotation箭头(无头)时,我希望这两个对象具有相同的线样式。但情况显然并非如此: using PyPlot plot([0,1],[-0.05,-0.05],linestyle="--",linewidth=1) annotate("",xy=(1,0.05),xytext=(0,0.05),xycoords="data",

我在Julia中使用PyPlot,它基本上依赖于matplotlib。但是,我怀疑Python中的问题是相同的:当我使用相同的
linestyle
属性
plot
一行和
annotation
箭头(无头)时,我希望这两个对象具有相同的线样式。但情况显然并非如此:

using PyPlot
plot([0,1],[-0.05,-0.05],linestyle="--",linewidth=1)
annotate("",xy=(1,0.05),xytext=(0,0.05),xycoords="data",
  arrowprops=Dict("arrowstyle"=>"-","linestyle"=>"--","linewidth"=>1))
ylim(-0.5,0.5)
结果:

  • 注释
    对象的黑色虚线以某种方式显示为圆形
  • 绘图
    曲线的蓝色虚线显示为锐边
即使指定的水平坐标相同,这两条线在图形中似乎没有相同的水平起点和终点。这对我来说不是什么大问题,但也可能与我的线条风格有关

有人知道如何通过
plot
annotate
创建精确的等高线图案吗


我需要这两条线对于出版物中的两个图具有完全相同的模式

我也可以重现这个问题。一个解决方法可能是使用。在
hlines
中使用与
plot
相同的线型可以得到完全相同的结果:

请注意,我只在Python中测试了这一点

import matplotlib.pyplot as plt

plt.plot([0,1],[-0.05,-0.05],linestyle="--",linewidth=4)

plt.annotate("", xy=(1,0.05), xytext=(0,0.05), xycoords="data",
             arrowprops={"arrowstyle":"-", "linestyle":"--", "linewidth":4})

plt.hlines(0.15, 0,1, linestyles="--", linewidth=4)

plt.ylim(-0.5,0.5)
plt.show()
有两个问题。(请注意,我在这里使用python语法,因为我对Julia几乎没有经验)

使线条同样长。

默认情况下,“注释”使用两端较短的线条,这在通常情况下非常有用,在这种情况下,您希望注释某些内容,而不希望线条与要注释的对象或注释文本重叠。为确保行未收缩,您可以使用
shrinkA
shrinkB
属性:

arrowprops={"arrowstyle" : "-", "linestyle" : "--",
            "shrinkA": 0, "shrinkB": 0}
使线条的样式相同。

默认情况下,
plot
创建的
Line2D
具有“对接”,而注释线具有圆角样式

为这两个设置“圆形”capstyle相对容易。对于
绘图
,使用
dash\u capstyle=“round”
选项:

import matplotlib.pyplot as plt

plt.plot([0,1],[-0.05,-0.05],linestyle="--",linewidth=3, dash_capstyle="round")
plt.annotate("",xy=(1,0.05),xytext=(0,0.05),xycoords="data",
             arrowprops={"arrowstyle" : "-", "linestyle" : "--",
                         "linewidth" : 3, "shrinkA": 0, "shrinkB": 0})
plt.ylim(-0.5,0.5)
plt.show()


目前不可能使两种capstyles“对接”。原因是注释的行是一个
补丁
,它没有此属性。当然,任何带有线条的注释都可以用
绘图
文本
模拟,因此如果需要,需要使用变通方法。

@ImportanceOfBeingErnest:我可以接受圆角而不是“对接”虚线。你的建议当然解决了我的问题。将Python代码翻译为Julia时,它会显示:

using PyPlot
plot([0,1],[-0.05,-0.05],linestyle="--",linewidth=1,dash_capstyle="round")
annotate("",xy=(1,0.05),xytext=(0,0.05),xycoords="data",
   arrowprops=Dict("arrowstyle"=>"-","linestyle"=>"--","linewidth"=>1,
   "shrinkA"=>0, "shrinkB"=>0))
ylim(-0.5,0.5)
这正是我需要的