我遇到了问题而我正试图绕过它。在pandas / matplotlib上很新。
我想在X轴上显示一个带有镜头时钟(0-24秒)的直方图,以及Y轴上的成功/未命中百分比。
我的数据在一列中有拍摄时钟,在另一列中显示未命中/制作(0和1)。我很难弄清楚如何根据垃圾箱生成百分比。
非常感谢
import matplotlib.pyplot as plt
fig = plt.figure()
x = nba_hist['SHOT_CLOCK']
y = nba_hist['FGM']
plt.hist(x)
plt.show()
SHOT_CLOCK FGM
10.8 1
3.4 0
5.0 0
10.3 0
10.9 0
9.1 0
14.5 0
3.4 1
12.4 0
17.4 0
16 0
12.1 1
4.3 1
编辑:所以使用这段代码我可以获得投篮命中率但不会分布在投篮箱内。有什么想法吗?
df_miss=nba_hist[nba_hist['FGM'] == 0]
df_hits=nba_hist[nba_hist['FGM'] == 1]
bins=np.arange(0,25,6)
hist_hits, bins_ = np.histogram(df_hits['FGM'], bins=bins)
hist_miss, bins_ = np.histogram(df_miss['FGM'], bins=bins)
答案 0 :(得分:1)
通过将绝对频率除以事件总数来获得箱中事件的相对频率。
因此,您需要计算直方图,例如与numpy
hist, bins = np.histogram(x)
根据您是否除以每个箱子中的事件数量,或者总事件数量,您可以得到不同的图表。
从左侧的那个你可以很容易地掌握,例如对于更大的时钟时间命中率更高(当然,这对于真实数据可能没有意义)。从右边的情节来看,你宁愿抓住中等时钟时间的更多试验 - 如果你只显示相对命中,那么根本就看不到。
from __future__ import division
import pandas as pd
import numpy as np; np.random.seed(2)
import matplotlib.pyplot as plt
t = np.random.rand(100)*24
hit = np.random.randint(0,2, size=100)
df = pd.DataFrame({"time":t, "hits":hit})
df_miss=df[df.hits == 0]
df_hits=df[df.hits == 1]
bins=np.arange(0,28,4)
hist_hits, bins_ = np.histogram(df_hits.time, bins=bins)
hist_miss, bins_ = np.histogram(df_miss.time, bins=bins)
rel_hits = hist_hits/(hist_hits+hist_miss)*100.
rel_miss = hist_miss/(hist_hits+hist_miss)*100.
rel_hits_n = hist_hits/np.sum(hist_hits+hist_miss)*100.
rel_miss_n = hist_miss/np.sum(hist_hits+hist_miss)*100.
fig , (ax, ax2) = plt.subplots(ncols=2, figsize=(7,3))
ax.bar(bins[:-1], rel_hits, width=4,
color="mediumseagreen", align="edge", ec="k")
ax.bar(bins[:-1], rel_miss, bottom=rel_hits, width=4,
color="tomato", align="edge", ec="k")
ax.set_xticks(bins)
ax.set_ylabel("relative hits and misses [%]")
ax2.bar(bins[:-1], rel_hits_n, width=4,
color="mediumseagreen", align="edge", ec="k", label="hit")
ax2.bar(bins[:-1], rel_miss_n, bottom=rel_hits_n, width=4,
color="tomato", align="edge", ec="k", label="miss")
ax2.set_xticks(bins)
ax2.set_ylabel("normalized hits and misses [%]")
plt.legend()
plt.tight_layout()
plt.show()