python二维分布图怎么画_Python简单做二维统计图

先上一张效果图:

541139-20170809205851464-611943444.png

以上图是一段时间内黄金价格的波动图。

代码如下:

importdatetime as DTfrom matplotlib importpyplot as pltfrom matplotlib.dates importdate2num

data=[]

with open("data.txt") as my_file:for line inmy_file:

date, price= line.partition("@")[::2]

data.append((DT.datetime.strptime(date,"%Y-%m-%d %H:%M:%S"), price))

d= [date for (date, value) in data[::8]]

x= [date2num(date) for (date, value) indata]

y= [value for (date, value) indata]

fig=plt.figure()

graph= fig.add_subplot(111)#Plot the data as a red line with round markers#graph.plot(x, y, 'r-o')

graph.plot(x, y)#Set the xtick locations to correspond to just the dates you entered.

graph.set_xticks(x)#Set the xtick labels to correspond to just the dates you entered.

graph.set_xticklabels(

[date.strftime("%Y-%m-%d %H:%M:%S") for date in d], rotation=30)#plt.grid(True)

plt.xticks(x[::8])#print [x[f_value] for f_value in range(0, len(x), 8)]

plt.show()

data.txt数据格式如下:

2017-07-29 00:00:02@27567

2017-07-29 03:00:02@27575

2017-07-29 06:00:01@27575

2017-07-29 09:00:01@27575

2017-07-29 12:00:02@27575

2017-07-29 15:00:01@27575

2017-07-29 18:00:01@27575

2017-07-29 21:00:01@27575

相关知识点介绍:

matplotlib中整个图像是一个Figure对象,在Figure对象中可以包含一个,或者多个Axes对象。每个Axes对象都是一个拥有自己坐标系统的绘图区域,多个Axes对象可以绘成一个比较复杂的图,比如共用x-axis的图。其逻辑关系如下:

541139-20170809210609058-779882566.jpg

一个具体的图如下:

541139-20170809210712199-289218589.jpg

Title为标题。Axis为坐标轴,Label为坐标轴标注。Tick为刻度线,Tick Label为刻度注释,需要注意的是x-axis的ticks(刻度)和x-axis的ticklabels是分开的,ticks就代表x轴的数据,ticklabels表示数据对应的字符串。并不是每个刻度都有字符串对应,ticklabels的密度是可以控制的。往往很密集的刻度会对应合理的字符串便以阅读。

第一个图的x-axis轴对应的是日期,但是x轴必须有数据,因此matplotlib.dates提供了将日期转化为数据的方法date2num, 这个例子中数据是每3小时有一条,但是显示的时候只到天,具体是如下两行代码:

#每8个取一个日期,其实就是一天

d = [date for (date, value) in data[::8]]#每个日期对应一个值,这样才能定位日期的位置,因此值也是每8个取一个

plt.xticks(x[::8])

获取x轴和y轴的刻度值

x = [date2num(date) for (date, value) indata]

y= [value for (date, value) in data]

创建图像并设置图像位置

fig =plt.figure()

graph= fig.add_subplot(111)

111的意思是把figure也就是图像分成1行1列,放在第一个格子,也就是独占整个图像

#把数据画到图上,r是red的意思,线是红色的,o表示对各个值画一个点。#graph.plot(x, y, 'r-o')#默认蓝线不画点

graph.plot(x, y)

#Set the xtick labels to correspond to just the dates you entered.#设置x轴label,其实就是上面算好的d日期字符串数组,rotation是label的角度

graph.set_xticklabels(

[date.strftime("%Y-%m-%d %H:%M:%S") for date in d], rotation=20)

#图表显示网格

plt.grid(True)#设置图标的标题

plt.title("Gold price trends")

plt.xticks(x[::8])#设置y轴label

plt.ylabel('Gold price/RMB cents')#设置x轴label

plt.xlabel('Date time')#显示图像

plt.show()

这么下来一个简单的图表就画好了,很快很实用吧。

参考链接:

### 回答1: 二维信息熵是用来衡量图像像素分布的不确定性或信息量的一种度量方法。计算RGB图像下的二维信息熵,可以按照以下步骤进行: 1. 首先,获取RGB图像的每个像素的RGB值。 2. 根据RGB值计算每个像素的灰度值。可以使用如下的公式计算灰度值: 灰度值 = 0.2989 * R + 0.5870 * G + 0.1140 * B 3. 基于计算得到的灰度值,建立一个二维直方图,用来记录每个灰度值出现的频次。 4. 遍历二维直方图,计算每个灰度值的概率。将每个灰度值出现的频次除以图像像素总数,得到每个灰度值的概率。 5. 根据计算得到的灰度值概率,计算二维信息熵。可以使用如下的公式计算二维信息熵: 二维信息熵 = -∑(p(i,j) * log2(p(i,j))) 其中,p(i,j)代表灰度值为(i,j)的像素的概率。 最后,将得到的二维信息熵作为结果输出。 需要注意的是,计算二维信息熵时可能需要对灰度值进行归一化处理,确保每个灰度值的概率之和为1,以保证计算结果的准确性。 以上就是用Python计算RGB图像下二维信息熵的方法,希望对你有帮助。 ### 回答2: RGB图像的二维信息熵是一种对图像信息多样性的度量。计算RGB图像下二维信息熵的步骤如下: 1. 将RGB图像转换为灰度图像:RGB图像由红色(R)、绿色(G)和蓝色(B)三个通道组成,将这三个通道的像素值按照一定权重进行加权平均,将得到的值作为对应像素的灰度值。 2. 计算灰度图像中每个像素点的灰度级频率:将灰度图像的像素值进行统计,得到每个灰度级的频率。可以用直方图来表示。 3. 根据频率计算每个灰度级的概率:将每个灰度级的频率除以总像素数,得到每个灰度级的概率。 4. 计算二维信息熵:使用概率来计算二维信息熵,公式为:entropy = -Σ(p(x, y) * log2(p(x, y))),其中p(x, y)表示灰度级(x, y)的概率。 上述计算过程可以通过Python中的图像处理库(如OpenCV或PIL)和数学库(如numpy)来实现。具体的代码如下所示: ```python import cv2 import numpy as np # 读取RGB图像 image = cv2.imread('image.jpg') # 将RGB图像转换为灰度图像 gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 计算灰度图像中每个像素点的灰度级频率 hist = cv2.calcHist([gray_image], [0], None, [256], [0, 256]) hist /= hist.sum() # 将频率归一化为概率 # 计算二维信息熵 entropy = -np.sum(hist * np.log2(hist)) ``` 通过上述代码,我们可以获得RGB图像下的二维信息熵,用来度量图像的多样性。 ### 回答3: 在Python中计算RGB图像的二维信息熵可以通过以下步骤实现: 首先,需要导入使用的库: ```python import numpy as np import math import cv2 ``` 然后,加载RGB图像,并将其转换为灰度图像: ```python image = cv2.imread('image.jpg') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) ``` 接下来,计算图像的灰度直方图: ```python histogram = cv2.calcHist([gray_image], [0], None, [256], [0, 256]) ``` 然后,计算每个灰度级的出现概率: ```python total_pixels = gray_image.shape[0] * gray_image.shape[1] probabilities = histogram / total_pixels ``` 接着,计算图像的二维信息熵: ```python entropy = 0 for p in probabilities: if p > 0: entropy -= p * math.log2(p) ``` 最后,打印出计算得到的二维信息熵: ```python print("二维信息熵:", entropy) ``` 完整代码如下: ```python import numpy as np import math import cv2 image = cv2.imread('image.jpg') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) histogram = cv2.calcHist([gray_image], [0], None, [256], [0, 256]) total_pixels = gray_image.shape[0] * gray_image.shape[1] probabilities = histogram / total_pixels entropy = 0 for p in probabilities: if p > 0: entropy -= p * math.log2(p) print("二维信息熵:", entropy) ``` 请用适当的文件路径替换代码中的'image.jpg',确保该图像存在于指定路径中,你也可以使用其他图像进行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值