简体   繁体   中英

2D histogram where one axis is cumulative and the other is not

Let's say I have instances of two random variables that can be treated as paired.

import numpy as np
x = np.random.normal(size=1000)
y = np.random.normal(size=1000)

Using matplotlib it is pretty easy to make a 2D histogram.

import matplotlib.pyplot as plt
plt.hist2d(x,y)

In 1D, matplotlib has an option to make a histogram cumulative.

plt.hist(x,cumulative=True)

What I would like incorporates elements of both classes. I would like to construct a 2D histogram such that the horizontal axis is cumulative and the vertical axis is not cumulative.

Is there are way to do this with Python/Matplotlib?

You can take advantage of np.cumsum to create your cumulative histogram. First save the output from hist2d , then apply to your data when plotting.

import matplotlib.pyplot as plt
import numpy as np

#Some random data
x = np.random.normal(size=1000)
y = np.random.normal(size=1000)

#create a figure
plt.figure(figsize=(16,8))

ax1 = plt.subplot(121) #Left plot original
ax2 = plt.subplot(122) #right plot the cumulative distribution along axis

#What you have so far
ax1.hist2d(x,y)

#save the data and bins
h, xedge, yedge,image = plt.hist2d(x,y)

#Plot using np.cumsum which does a cumulative sum along a specified axis
ax2.pcolormesh(xedge,yedge,np.cumsum(h.T,axis=1))

plt.show()

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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