Matplotlib图更改具有不同的数据结构(相同的数据) [英] Matplotlib plot changes with different data structure (same data)

查看:57
本文介绍了Matplotlib图更改具有不同的数据结构(相同的数据)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用 matplotlib 创建散点图给我一个空的或正确的图,这取决于我是从带有 from_dict 的字典还是从带有简单 pandas.DataFrame<的列表中构建一个 Pandas 数据框/code>.

Creating a scatter plot with matplotlib is giving me an empty or correct plot depending on whether I construct a pandas dataframe from a dictionary with from_dict or from a list with simply pandas.DataFrame.

import pandas as pd
import matplotlib.pyplot as plt 
list_data  = ['2016-10-06', '2016-09-24', 55, 'dummy', 0.510823, 0.29431]
columns    = ['master', 'slave', 'baseline', 'coh', 'coh_mean', 'coh_std']
dict_data  = dict(zip(columns, list_data))
data       = pd.DataFrame.from_dict(dict_data, orient='index').T
data.slave = pd.to_datetime(data.slave)
fig, axes  = plt.subplots()
axes.scatter(data.slave.values, data.baseline.values)
plt.show()

结果:

空图

同时:

list_data  = ['2016-10-06', '2016-09-24', 55, 'dummy', 0.510823, 0.29431]
columns    = ['master', 'slave', 'baseline', 'coh', 'coh_mean', 'coh_std']

data = pd.DataFrame([list_data], columns=columns)
data.slave = pd.to_datetime(data.slave)
fig, axes  = plt.subplots()
axes.scatter(data.slave.values, data.baseline.values)
plt.show()

结果:

正确的情节

MacOS Sierra 10.12.6 ||蟒蛇:v3.6.2 ||matplotlib: v2.0.2 ||熊猫 v0.20.3

MacOS Sierra 10.12.6 || python: v3.6.2 || matplotlib: v2.0.2 || pandas v0.20.3

我尝试了各种后端以及python:v2.7,但无济于事.谁能解释为什么会发生这种情况(甚至重现):OverflowError使用 Matplotlib 和日期时间)?

I've tried various backends as well as python: v2.7 to no avail. Can anyone explain why this is happening (or even reproduce): OverflowError with Matplotlib and datetime)?

推荐答案

之所以会发生这种情况,是因为使用字典(使用上述方法)创建数据框不会推断数据类型.它可能在更高版本中,但是我正在运行 0.20.1 .出于演示目的,我将您的 dfs 重命名:

This is happening because creating a dataframe from a dictionary (using the above method) it is not inferring datatypes. It may in later versions but I'm running 0.20.1. For demonstration purposes I renamed your dfs:

df_fromdict       = pd.DataFrame.from_dict(dict_data, orient='index').T
df_fromdict.slave = pd.to_datetime(df_fromdict.slave)

df_fromdict.dtypes
master              object
slave       datetime64[ns]
baseline            object # notice here your baseline column is not recognized as int
coh                 object
coh_mean            object
coh_std             object
dtype: object


df_fromlist = pd.DataFrame([list_data], columns=columns)
df_fromlist.slave = pd.to_datetime(df_fromlist.slave)

df_fromlist.dtypes
master              object
slave       datetime64[ns]
baseline             int64 # recognized as int by default
coh                 object
coh_mean           float64
coh_std            float64
dtype: object

尝试以下方法作为测试,您的第一个散点图应按预期显示:

Try the following as a test and your first scatterplot should appear as expected:

fig, axes  = plt.subplots()
axes.scatter(df_fromdict.slave.values, df_fromdict.baseline.astype(int).values)
plt.show()

这篇关于Matplotlib图更改具有不同的数据结构(相同的数据)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆