Python 3.x python中的简单折线图是将值舍入为整数。为什么?
我正试图将python添加到我的指令库中(R是我选择的程序),但在简单的线条图上遇到了问题 虽然生成的数组(在本例中为y)是浮点类型(我想要),但当我使用matplotlib绘制简单的线图时,相同的y不会被截断为最接近的整数 任何帮助都将不胜感激 谢谢。下面是示例代码。 另外,任何关于清理代码的提示都是非常受欢迎的Python 3.x python中的简单折线图是将值舍入为整数。为什么?,python-3.x,matplotlib,Python 3.x,Matplotlib,我正试图将python添加到我的指令库中(R是我选择的程序),但在简单的线条图上遇到了问题 虽然生成的数组(在本例中为y)是浮点类型(我想要),但当我使用matplotlib绘制简单的线图时,相同的y不会被截断为最接近的整数 任何帮助都将不胜感激 谢谢。下面是示例代码。 另外,任何关于清理代码的提示都是非常受欢迎的 import sys import numpy as np from numpy import random import pandas as pd import matplotli
import sys
import numpy as np
from numpy import random
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as matplotlib
plt.style.use('ggplot')
greens = np.array([0,0])
others = np.array(np.arange(1,37))
# no axis provided, array elements will be flattened
roulette = np.append(greens, others)
spins1000 = np.array(random.choice(roulette, size=(1000)))
# Create function for cum mean in python
def cum_mean(arr):
cum_sum = np.cumsum(arr, axis=0)
for i in range(cum_sum.shape[0]):
if i == 0:
continue
print(cum_sum[i] / (i + 1))
cum_sum[i] = cum_sum[i] / (i + 1)
return cum_sum
y = np.array(cum_mean(spins1000))
x = np.array(np.arange(1,1001))
fig, ax = plt.subplots(figsize=(10, 6))
ax.set(xlim=(0, 1000), ylim=(10.00, 25.00))
line = ax.plot(x, y, color='red', lw=1)[0]
plt.draw()
plt.show()
有两件事发生了,这两件事共同导致了这种奇怪的行为
如果cum_sum=np.cumsum(arr,axis=0)
是一个整数数组,那么将arr
也作为一个整数数组cum_sum
- 在循环中,写入
将结果(浮点)存储到整数数组中;这个数字是四舍五入的cum_sum[i]=cum_sum[i]/(i+1)
cum\u sum
创建为浮点(如cum\u sum=np.cumsum(arr,dtype=float)
)。或者以“最简单的方式”进行操作,一次性创建一个新数组:return cum_sum/np.arange(1,cum_sum.shape[0]+1)
。请注意,numpy的数组操作是矢量化的,因此将数组除以数组得到的结果与将元素除以元素得到的结果相同。这运行得相当快(类似于R中发生的情况)
另外,如果您要编写cum_sum=cum_sum/np.arange(11001)
,cum_sum
将是一个新的浮点数组。只有通过逐个元素访问它,数组才保持为整数数组。请注意,np.arange()
已经创建了一个numpy数组,因此再次调用np.array
不会改变它
导入matplotlib.pyplot作为plt
将numpy作为np导入
plt.style.use('ggplot'))
greens=np.array([0,0])
其他=np.arange(1,37)
#未提供轴,阵列元素将被展平
轮盘赌=np.追加(绿色,其他)
spins1000=np.array(np.random.choice(轮盘赌,大小=(1000)))
#在python中为cum mean创建函数
定义和平均值(arr):
cum_sum=np.cumsum(arr)
返回总和/(np.arange(1,总和形状[0]+1))
y=累积平均值(1000转)
x=np.arange(11001)
图,ax=plt.子批次(图尺寸=(10,6))
ax.set(xlim=(01000),ylim=(10.00,25.00))
直线=最大。绘图(x,y,颜色=红色,lw=1)[0]
plt.show()