简体   繁体   English

在 matplotlib 中绘制对数正态比例

[英]Plotting Log-normal scale in matplotlib

I've got these two lists which are x,y points to be plotted:我有这两个列表,它们是要绘制的 x,y 点:

microns = [38,  45,  53,  63,  75,  90, 106, 125, 150, 180]
cumulative_dist = [25.037, 32.577, 38.34, 43.427, 51.57,56.99, 62.41,69.537,74.85, 81.927]

The thing is I need to plot them following the scale showed in the image below ( more info here ), which is a log-normal plot.问题是我需要按照下图所示的比例绘制它们( 更多信息在这里),这是一个对数正态图。

How can I get this scale using matplotlib?如何使用 matplotlib 获得此比例?

I guess I'll need to use matplotlib.scale.FuncScale , but I'm not quite sure how to get there.我想我需要使用matplotlib.scale.FuncScale ,但我不太确定如何到达那里。

在此处输入图片说明

After David 's insightful comment I've read this page and managed to plot the Figure the way I wanted.David富有洞察力的评论之后,我阅读了页面并设法按照我想要的方式绘制了图形。

在此处输入图片说明

from matplotlib.ticker import ScalarFormatter, AutoLocator
from matplotlib import pyplot
import pandas as pd
import probscale
fig, ax = pyplot.subplots(figsize=(9, 6))
microns = [38,  45,  53,  63,  75,  90, 106, 125, 150, 180]
cumulative_dist = [25.037, 32.577, 38.34, 43.427, 51.57,56.99, 62.41,69.537,74.85, 81.927]
probscale.probplot(pd.Series(microns, index=cumulative_dist), ax=ax, plottype='prob', probax='y', datascale='log',
                   problabel='Cumulative Distribution (%)',datalabel='Particle Size (μm)',
                   scatter_kws=dict(marker='.', linestyle='none', markersize=15))
ax.set_xlim(left=28, right=210)
ax.set_ylim(bottom=1, top=99)
ax.set_title('Log Normal Plot')
ax.grid(True, axis='both', which='major')
formatter = ScalarFormatter()
formatter.set_scientific(False)
ax.xaxis.set_major_formatter(formatter)
ax.xaxis.set_minor_formatter(formatter)
ax.xaxis.set_major_locator(AutoLocator())
ax.set_xticks([])  # for major ticks
ax.set_xticks([], minor=True)  # for minor ticks
ax.set_xticks(microns)
fig.show()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM