当前位置: 首页 > 知识库问答 >
问题:

使用Matplotlib以对数比例绘制直方图

咸承教
2023-03-14

我有一个pandas数据框,它在一系列中具有以下值

x = [2, 1, 76, 140, 286, 267, 60, 271, 5, 13, 9, 76, 77, 6, 2, 27, 22, 1, 12, 7, 19, 81, 11, 173, 13, 7, 16, 19, 23, 197, 167, 1]

我被指示用Python 3.6在Jupyter笔记本中绘制两个直方图。不用担心,对吧?

x.plot.hist(bins=8)
plt.show()

我选择了8个垃圾箱,因为这对我来说是最好的。我还被指示用x的对数绘制另一个直方图。

x.plot.hist(bins=8)
plt.xscale('log')
plt.show()

这个直方图看起来很糟糕。我做得不对吗?我试过摆弄这个情节,但我所做的一切似乎都让柱状图看起来更糟。例子:

x.plot(kind='hist', logx=True)

除了将X的日志绘制为直方图之外,我没有得到任何指示。

我真的很感激任何帮助!!!

为了记录在案,我导入了熊猫、Numpy和matplotlib,并指定情节应该是内联的。

共有3个答案

闾丘永春
2023-03-14

用x的对数绘制另一个直方图。

与在对数刻度上绘制x不同。绘制x的对数将是

np.log(x).plot.hist(bins=8)
plt.show()

不同的是x本身的值被转换了:我们看到的是它们的对数。

这不同于对数标度上的绘图,在对数标度下,我们保持x不变,但改变水平轴的标记方式(将条向右挤压,将条向左拉伸)。

耿志义
2023-03-14

这里还有一个解决方案,不使用子图或在同一图像中绘制两个东西。

import numpy as np
import matplotlib.pyplot as plt

def plot_loghist(x, bins):
  hist, bins = np.histogram(x, bins=bins)
  logbins = np.logspace(np.log10(bins[0]),np.log10(bins[-1]),len(bins))
  plt.hist(x, bins=logbins)
  plt.xscale('log')

plot_loghist(np.random.rand(200), 10)
公冶龙野
2023-03-14

hist调用中指定bin=8,意味着最小值和最大值之间的范围被平均划分为8个bin。在线性尺度上相等的东西在对数尺度上是扭曲的。

你能做的就是指定柱状图的箱子,使它们在宽度上不相等,使它们在对数尺度上看起来相等。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

x = [2, 1, 76, 140, 286, 267, 60, 271, 5, 13, 9, 76, 77, 6, 2, 27, 22, 1, 12, 7, 
     19, 81, 11, 173, 13, 7, 16, 19, 23, 197, 167, 1]
x = pd.Series(x)

# histogram on linear scale
plt.subplot(211)
hist, bins, _ = plt.hist(x, bins=8)

# histogram on log scale. 
# Use non-equal bin sizes, such that they look equal on log scale.
logbins = np.logspace(np.log10(bins[0]),np.log10(bins[-1]),len(bins))
plt.subplot(212)
plt.hist(x, bins=logbins)
plt.xscale('log')
plt.show()
 类似资料:
  • numpy.histogram()函数将输入数组和作为两个参数。 bin数组中的连续元素用作每个bin的边界。 Matplotlib 可以将直方图的数字表示转换为图形。 pyplot子模块的plt()函数将包含数据和数组的数组作为参数,并转换为直方图。

  • 我有一个从pandas数据框创建的直方图,我想绘制一条代表数据集平均值的垂直虚线。我已经回顾了这个线程,这正是我正在寻找的样式,但是,我不知道如何使它与我的代码一起工作(如下所示): 我最终收到了以下错误: 不知道这意味着什么,任何帮助都将不胜感激。 编辑:我的数据文件是一个有一列的csv,第一行是一个标题(字符串),所有后续的107行都是从app开始的值。1.0E 11至4.0E 11 假数据(

  • 问题内容: 最近几天,我一直在与Numpy和matplotlib一起玩。我在尝试使matplotlib绘制函数而不阻止执行时遇到问题。我知道这里已经有很多线程在问类似的问题,并且我已经在Google上搜索了很多,但是没有设法使这项工作有效。 我曾尝试按照某些人的建议使用show(block = False),但是我得到的只是一个冻结的窗口。如果我简单地调用show(),则将正确绘制结果,但执行将被

  • 本文向大家介绍python matplotlib库直方图绘制详解,包括了python matplotlib库直方图绘制详解的使用技巧和注意事项,需要的朋友参考一下 例题:假设你获取了250部电影的时长(列表a中),希望统计出这些电影时长的分布状态(比如时长为100分钟到120分钟电影的数量,出现的频率)等信息,你应该如何呈现这些数据? 一些概念及问题: 把数据分为多少组进行统计 组数要适当,太少会

  • 我正在使用python中的matplotlib绘制直方图,并希望绘制一条代表数据集平均值的线,以虚线的形式覆盖在直方图上(或者其他颜色也可以)。关于如何在柱状图上画一条线有什么想法吗? 我正在使用plot()命令,但不确定如何绘制垂直线(即,我应该为y轴指定什么值? 谢谢

  • 我正在尝试使用 marplot.lib 库在 Python 中绘制直方图;但是,我一直收到此错误:“属性错误:箱必须单调增加。 这是我目前的代码: 传入的参数是信息。“信息”是一个元组列表,可能如下所示: [(4, 0.7984031936127745), (5, 0.5988023952095809), (5, 0.8739076154806492), (5, 0.736454497632824