调整不透明度并向matplotlib图添加注释和文本

时间:2017-06-28 09:32:09

标签: python matplotlib

我想创建一些出版质量数据。我想在下面的尝试中添加文本并注释我的观点。我的.eps格式的实际数字存在问题。当我放大时,尽管“s = 0.00001”,情节点仍然可见,并且线条的不透明度似乎在不同部分之间变化,看起来波涛汹涌,并不像我希望的那样时尚。这条线也与文字和点重叠,有时它太杂乱而且难以阅读。任何其他的想法,以呼吸一些风格,颜色到我的数字也将受到赞赏。

eventnews

1 个答案:

答案 0 :(得分:1)

有线,如果你不想要点显示,为什么还要使用scatter()呢?在我的电脑中生成的情节证明很好,不透明度不应该根据你的代码改变,如果它,我怀疑你的屏幕是否干净......并且为了处理重叠,我建议稍微移动文本。

我做了几处修改,尝试让它看起来更好并添加一些颜色(但我不确定这是否是“时尚”的意思):

import matplotlib.pyplot as plt
from scipy import stats
import numpy.random as npran

x = [1,2,3,4,5,6,7,8,9]
y = [1,2,3,4,5,6,7,8,9]
n = ['A', 'B', 'C', 'D', 'E' , 'F', 'G', 'H', 'I']
col = ['r', 'g', 'b', 'c', 'm', 'y', 'k']

slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)
fig, ax = plt.subplots()
plt.scatter(x, y, marker='o', color = 'k', s = 1) #make points more obvious
for i, txt in enumerate(n):
    #shift texts little
    ax.annotate(txt, (x[i]-0.2, y[i]+0.3), fontsize = 15, \
        color = [npran.rand() for i in range(3)])#make it colorfull?
    #or use color = npran.choice(col)
predict_y = [(intercept + (slope * x)) for x in x]
plt.plot(x, predict_y, 'k-', alpha=0.3, linewidth=0.75) #wider line
plt.xlabel('Number 1', fontsize = 20) #Larger font 
plt.ylabel('Number 2', fontsize = 20)
plt.grid(color = 'r') #add grids
# make the texts together, and move it to right-down
plt.figtext(.65, .15, "$R^2: {:.2f}$\n$P-value: {:.3f}$".format(r_value**2, p_value), \
    bbox={'facecolor':'red', 'alpha':0, 'pad':10}, fontsize = 15)
#you can change to have the boundry box visible
#like 'bbox={'facecolor':'white', 'alpha':1, 'pad':10}'
plt.show()

SamplePic