matplotlib 散点图和注释函数annotate
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matplotlib 散点图和注释函数annotate相关的知识,希望对你有一定的参考价值。
参考技术A """心形函数:17*x^2 - 16*|x|*y + 17*y^2 = 225 :外心
"""
import numpy as np
import matplotlib.pyplot as plt
X=np.arange(-5.0,5.0,0.1)
Y=np.arange(-5.0,5.0,0.1)
x,y=np.meshgrid(X,Y)
f=17*x**2-16*np.abs(x)*y+17*y**2-225
"""
'8*x^2 - 9*|x|*y + 8*y^2 = 17': 内心
"""
A = np.arange(-2.5, 2.5, 0.05)
B = np.arange(-2.5, 2.5, 0.05)
i,j = np.meshgrid(A,B)
f = 8 * i ** 2 - 9 * np.abs(i) * j + 8 * j ** 2 - 17
#绘制画布
fig,ax=plt.subplots()
#大心,绘制登高线的函数contour
plt.contour(x,y,f,0,colors='r')
#小心,绘制登高线的函数contour
plt.contour(i,j,f,0,colors='r')
plt.title('My wife I love you')#图标题
plt.xlabel('I Love You 521')#x轴标签
plt.ylabel('I Love You 1314')#y轴标签
#注释标注YoYO
plt.annotate("YoYo",xy=(0,1.6),xytext=(-0.3,0.25),
arrowprops=dict(arrowstyle="->",facecolor='black'))
#注释标注CoCo
plt.annotate("CoCo",xy=(0,2.8),xytext=(-0.4,4),
arrowprops=dict(arrowstyle="->",facecolor='black'))
#斜线
lx=[-4,-2,0,2,4]
ly=[-4,-2,0,2,4]
plt.plot(lx,ly,"--",c="black")
#斜线的箭头
plt.annotate("",xy=(4,4),xytext=(3.9,3.9),
arrowprops=dict(arrowstyle="->",facecolor='black'))
#ax.set_xticks([])#隐藏x轴
#ax.set_yticks([])#隐藏y轴
plt.grid() #网格
plt.show()
matplotlib:通过用于为散点图着色的对数颜色条值对 2D 线进行着色
【中文标题】matplotlib:通过用于为散点图着色的对数颜色条值对 2D 线进行着色【英文标题】:matplotlib: Color 2D line by logarithmic colorbar value used to color scatterplot 【发布时间】:2015-07-09 16:02:31 【问题描述】:我需要为一条线着色,该线连接由第三个变量着色的散点图(第三个变量对于所有散点点都是相同的;最后我将有多个散点图和不同的第三个变量)。我需要线条的颜色来匹配散点,并且颜色条需要进行对数缩放。我无法提取用于为散点着色的 RGBA 对数归一化值,以便按该值对线进行着色。示例如下:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
color = plt.get_cmap('Blues')
#Fake data
a = np.arange(0,10,1)
b = np.arange(10,20,1)
d = [100]*10
maxval=1000.0
minval=10.0
#Normalize array to limits of colorbar
l=d[1]
normalized= (l/(maxval-minval))
#Check if Nan (I have some NaN's).
#Returns the colormap value
check = np.isnan(np.sum(normalized))
cmapvalue=[]
if check==True:
cmapvalue=g
else:
cmapvalue=color(normalized)
#Plot scatter and line, line needs to be colored by RGBA value used to color scatter points
plt.scatter(a, b, c=d, cmap=color, norm=mpl.colors.LogNorm(vmax=maxval, vmin=minval), zorder=2, s=50)
plt.plot(a,b, c=cmapvalue, zorder=1, lw=4)
plt.colorbar()
plt.show()
任何帮助将不胜感激
【问题讨论】:
能否请您也提供d
?或者提供合适的替代品?
已更新...道歉
【参考方案1】:
所以问题是您线性地(手动)缩放您的值。但是在 scatter 调用中,您传递了一个对数缩放类。您可以直接使用它来规范化调用 plot 的值,而不仅仅是传递它:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
#Fake data
a = np.arange(0,10,1)
b = np.arange(10,20,1)
d = [50]*10
# define vmin and vmax
maxval=1000.0
minval=10.0
# build up colormap and normalizer
colormap = plt.get_cmap('Blues')
norm = mpl.colors.LogNorm(vmax=maxval, vmin=minval)
# helper function to plot the line and the scatter data
def plot_my_scatterdata(x, y, d):
if np.any(np.isnan(d)):
color = 'g'
else:
# use the colormap and the normalization instance!
color = colormap(norm(d[0]))
plt.scatter(a, b, c=d, cmap=colormap, norm=norm, zorder=2, s=50)
plt.plot(a,b, '-', color=color, zorder=1, lw=4)
plot_my_scatterdata(a, b, d)
d = [100]*10
b += 1
plot_my_scatterdata(a, b, d)
d = [500]*10
b += 1
plot_my_scatterdata(a, b, d)
d[0] = np.nan
b += 1
plot_my_scatterdata(a, b, d)
plt.colorbar()
plt.show()
结果:
【讨论】:
以上是关于matplotlib 散点图和注释函数annotate的主要内容,如果未能解决你的问题,请参考以下文章
转录组scatter plot 散点图和ma plot有啥区别