python 柱状图宽度设置_在Python中,如何绘制一个柱状图,其中条高是bin宽度的函数?...

我的解决方案代码:import requests

from bs4 import BeautifulSoup

import re

import matplotlib.pyplot as plt

import numpy as np

regex = r"((-?\d+(\s?,\s?)?)+)\n"

page = requests.get('http://www.stat.berkeley.edu/~stark/SticiGui/Text/histograms.htm')

soup = BeautifulSoup(page.text, 'lxml')

# La data se halla dentro de los scripts y no dentro de la etiqueta html TABLE

scripts = soup.find_all('script')

target = scripts[23].string

hits = re.findall(regex, target, flags=re.MULTILINE)

data = []

if hits:

for val, _, _ in hits:

data.extend([int(x) for x in re.findall(r"-?\d+", val)])

print(sorted(data))

print('Length of data:', len(data), "\n")

# Intervals

bins = np.array([-160, -110, -90, -70, -40, -10, 20, 50, 80, 160])

# calculating histogram

widths = bins[1:] - bins[:-1]

freqs = np.histogram(data, bins)[0]

heights = freqs / widths

mainlabel = 'The deviations of the 100 measurements from a ' \

'base value of {}, times {}'.format(r'$9.792838\ ^m/s^2$', r'$10^8$')

hlabel = 'Data gravity'

# plot with various axes scales

plt.close('all')

fig = plt.figure()

plt.suptitle(mainlabel, fontsize=16)

# My screen resolution is: 1920x1080

plt.get_current_fig_manager().window.wm_geometry("900x1100+1050+0")

# Bar chart

ax1 = plt.subplot(211) # 2-rows, 1-column, position-1

barlist = plt.bar(bins[:-1], heights, width=widths, facecolor='yellow', alpha=0.7, edgecolor='gray')

plt.title('Bar chart')

plt.xlabel(hlabel, labelpad=30)

plt.ylabel('Heights')

plt.xticks(bins, fontsize=10)

# Change the colors of bars at the edges...

twentyfifth, seventyfifth = np.percentile(data, [25, 75])

for patch, rightside, leftside in zip(barlist, bins[1:], bins[:-1]):

if rightside < twentyfifth:

patch.set_facecolor('green')

elif leftside > seventyfifth:

patch.set_facecolor('red')

# code from: https://stackoverflow.com/questions/6352740/matplotlib-label-each-bin

# Label the raw counts and the percentages below the x-axis...

bin_centers = 0.5 * np.diff(bins) + bins[:-1]

for count, x in zip(freqs, bin_centers):

# Label the raw counts

ax1.annotate(str(count), xy=(x, 0), xycoords=('data', 'axes fraction'),

xytext=(0, -18), textcoords='offset points', va='top', ha='center', fontsize=9)

# Label the percentages

percent = '%0.0f%%' % (100 * float(count) / freqs.sum())

ax1.annotate(percent, xy=(x, 0), xycoords=('data', 'axes fraction'),

xytext=(0, -28), textcoords='offset points', va='top', ha='center', fontsize=9)

plt.grid(True)

# Histogram Plot

ax2 = plt.subplot(223) # 2-rows, 2-column, position-3

plt.hist(data, bins, alpha=0.5)

plt.title('Histogram')

plt.xlabel(hlabel)

plt.ylabel('Frequency')

plt.grid(True)

# Histogram Plot

ax3 = plt.subplot(224) # 2-rows, 2-column, position-4

plt.hist(data, bins, alpha=0.5, normed=True, facecolor='g')

plt.title('Histogram (normed)')

plt.xlabel(hlabel)

plt.ylabel('???')

plt.grid(True)

plt.tight_layout(pad=1.5, w_pad=0, h_pad=0)

plt.show()

ohcUi.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值