Custom axis scales - “Reverse” logarithmic?

隐身守侯 提交于 2019-12-23 09:58:56

问题


Sorry about the poor title ;)

I'm trying to recreate a matlab plot I've come across in some other work, but I don't quite understand the scale they are using. The y axis increments are as follows (from the top [+ve y]):

0.9999, 0.999, 0.99, 0.9, 0

I can use semilogy to plot a logarithmic graph, but this is kind of the wrong way round; my increments go

1, 0.1, 0.01, 0.001, etc

which is actually 1 - i, where i is the increments I actually want! I don't entirely understand how to describe this type of plot anyway; can anyone help?


回答1:


To plot the axes the way you want to, you have to do three steps: (1) plot 1-y, (2) reverse axes (3) relabel axes

y = [0.4 0.8 0.99 0.9999];

%# plot 1-y 
plot(1-y) %# alternatively use semilog, then you won't have to adjust 'yscale' below

%# reverse y-axis
set(gca,'ydir','reverse','yscale','log')

%# if necessary, set the axis limits here

%# relabel y-axis
set(gca,'yticklabel',num2str(1-10.^str2num(get(gca,'yticklabel'))))




回答2:


Using the same idea of @Jonas, I rewrite the code in a newer version of matplotlib. Suppose y = np.array([0.1, 0.5, 0.9, 0.99, 0.999])

plt.yscale('log')
plt.gca().invert_yaxis()
plt.plot(x, 1-y)
plt.gca().set_yticklabels(1-plt.gca().get_yticks())


来源:https://stackoverflow.com/questions/5395554/custom-axis-scales-reverse-logarithmic

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!