Python 3.x python中的简单折线图是将值舍入为整数。为什么?

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

我正试图将python添加到我的指令库中(R是我选择的程序),但在简单的线条图上遇到了问题

虽然生成的数组(在本例中为y)是浮点类型(我想要),但当我使用matplotlib绘制简单的线图时,相同的y不会被截断为最接近的整数

任何帮助都将不胜感激

谢谢。下面是示例代码。 另外,任何关于清理代码的提示都是非常受欢迎的

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()