gpt4 book ai didi

python - 在 python 中使用 matplotlib 绘制相似性度量的圆圈时出错

转载 作者:行者123 更新时间:2023-11-28 21:52:51 25 4
gpt4 key购买 nike

我正在开展一个项目,使用 tf-idf 度量来寻找两个句子/文档之间的相似性。

现在我的问题是如何以图形/可视化格式显示相似性。类似于维恩图,其中交集值成为相似性度量或 matplotlib 或任何 python 库中可用的任何其他图。

我尝试了以下代码:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

documents = (
"The sky is blue",
"The sun is bright"

)
tfidf_vectorizer = TfidfVectorizer()
tfidf_matrix = tfidf_vectorizer.fit_transform(documents)
print tfidf_matrix
cosine = cosine_similarity(tfidf_matrix[0:1], tfidf_matrix)
print cosine
import matplotlib.pyplot as plt
r=25
d1 = 2 * r * (1 - cosine[0][0])
circle1=plt.Circle((0,0),d1/2,color='r')
d2 = 2 * r * (1 - cosine[0][1])
circle2=plt.Circle((r,0),d2/2,color="b")
fig = plt.gcf()
fig.gca().add_artist(circle1)
fig.gca().add_artist(circle2)
fig.savefig('plotcircles.png')
plt.show()

但是我得到的plot是空的。谁能解释一下可能是什么错误。

绘图圈来源:plot a circle

最佳答案

只是为了解释发生了什么,这里有一个独立的问题示例(如果圆圈完全在边界之外,则不会显示任何内容):

import matplotlib.pyplot as plt
from matplotlib.patches import Circle

fig, ax = plt.subplots()
circ = Circle((1, 1), 0.5)
ax.add_artist(circ)
plt.show()

enter image description here

当您通过 add_artistadd_patch 等手动添加艺术家时,除非您明确这样做,否则不会应用自动缩放。您正在访问 matplotlib 的底层接口(interface),高层函数(例如 plot)构建于其之上。然而,这也是在数据坐标中添加单个圆的最简单方法,因此在这种情况下您需要较低级别的接口(interface)。

此外,add_artist 对此过于笼统。您实际上需要 add_patch(plt.Circlematplotlib.patches.Circle)。 add_artistadd_patch 之间的区别可能看起来很随意,但是 add_patch 有额外的逻辑来计算自动缩放的补丁范围,而 add_artist 是“裸”低级函数,可以接受任何艺术家,但不做任何特殊的事情。如果您使用 add_artist 添加补丁,自动缩放将无法正常工作。

要根据您添加的艺术家自动缩放绘图,请调用 ax.autoscale():

作为自动缩放手动添加的补丁的快速示例:

import matplotlib.pyplot as plt
from matplotlib.patches import Circle

fig, ax = plt.subplots()
circ = Circle((1, 1), 0.5)
ax.add_patch(circ)
ax.autoscale()
plt.show()

enter image description here

您的下一个问题可能是“为什么圆圈不是圆的?”。它是,在数据坐标中。但是,绘图的 x 和 y 比例(这是纵横比,在 matplotlib 术语中)目前不同。要强制它们相同,请调用 ax.axis('equal')ax.axis('scaled')。 (在这种情况下,我们实际上可以省略对 autoscale 的调用,因为 ax.axis('scaled'/'equal') 会有效地为我们调用它。):

import matplotlib.pyplot as plt
from matplotlib.patches import Circle

fig, ax = plt.subplots()
circ = Circle((1, 1), 0.5)
ax.add_patch(circ)
ax.axis('scaled')
plt.show()

enter image description here

关于python - 在 python 中使用 matplotlib 绘制相似性度量的圆圈时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27620167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com