如何使用matplotlib和json(或yaml)文件生成图形?

2024-06-08 13:47:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我在编写一个脚本时遇到了一些困难,这个脚本可以用来自yaml或json文件的输入来生成一个图形。首先,我尝试用yaml文件,但是失败了-现在我把yaml文件转换成json文件,然后用它们来尝试。在

我想要什么?在

我有400多个json文件,其中包含有关特定结构的特定信息(有400多个结构,因此有400多个json文件)。我对json文件中的一个数据感兴趣,它是'Resolution':0.00(它是一些浮点值),因为我想知道有多少结构有什么分辨率(所以,x轴应该是出现在结构中的分辨率值,y轴应该是具有这种分辨率的结构的数量。在

我以前从未使用过matplotlib,所以我在脚本的开头就失败了,定义了x和y轴,以及如何实现json文件中的信息。在

import matplotlib.pyplot as plt
import numpy as np
import json

#this is preparation for my inputs, nothing important for my current question
cif_ID = "aaa, bbb" #there are 400+ IDs
cif_input = cif_ID.split(", ")
for ID in cif_input:
json_path = "/home/ME/something/something/{}/" .format(ID) 
json_file = json_path + "{}.json" .format(ID)


with open(json_file, "r") as f:
    doc = json.load(f)

    resolution = doc['Resolution']
    print(resolution)  #this print me all resolution values (float) from all 400+ json files

    x = (doc['Resolution']) #I know this is wrong way, but I want to just show that I tried

Tags: 文件import脚本idjsonyamlfordoc
1条回答
网友
1楼 · 发布于 2024-06-08 13:47:52

下面是基于您建议的json文件格式的示例代码。此代码将首先在“./data”目录中生成示例json文件,然后从这些文件中读取示例解析值。在

import os
import json
import numpy as np
from matplotlib import pyplot as plt

master_data_dir = './data'
os.makedirs(master_data_dir,exist_ok = True)

# +++++++++++++++++++++++++
# generate json file
# +++++++++++++++++++++++++

# some JSON Format in file:
# x1 =  '{ "x":"J", "Resolution":17, "y":"51"}'
# x2 =  '{ "x":"J", "Resolution":11, "y":"52"}'
# x3 =  '{ "x":"J", "Resolution":10, "y":"53"}'

x1 =  { "x":"J1", "Resolution":17, "y":"51"}
x2 =  { "x":"J2", "Resolution":11, "y":"52"}
x3 =  { "x":"J3", "Resolution":10, "y":"53"}
x4 =  { "x":"J4", "Resolution":10, "y":"54"}
x5 =  { "x":"J5", "Resolution":10, "y":"55"}
x6 =  { "x":"J6", "Resolution":11, "y":"56"}
x7 =  { "x":"J7", "Resolution":13, "y":"57"}
x8 =  { "x":"J8", "Resolution":15, "y":"58"}
x9 =  { "x":"J9", "Resolution":17, "y":"59"}
x10 =  { "x":"J10", "Resolution":15, "y":"60"}

filename = ['x1','x2','x3','x4','x5','x6','x7','x8','x9','x10']

for i,j in enumerate([x1,x2,x3,x4,x5,x6,x7,x8,x9,x10]):
    with open(master_data_dir+'/'+filename[i]+".json", 'w') as f:
        json.dump(j,f)
        f.close()
# ++++++++++++++++++++++++++++++++++++
# Ends here
# ++++++++++++++++++++++++++++++++++++

# ++++++++++++++++++++++++++++++++++++++++++++++
# Read json data to findout resolution frequency
# ++++++++++++++++++++++++++++++++++++++++++++++

list_files_in_data_dir  = os.listdir(master_data_dir)
resoltuion_values = [] 
for json_file_name in list_files_in_data_dir:
    json_file_path =  os.path.join(master_data_dir,json_file_name)
    with open(json_file_path, 'r') as f:
        jsondata = json.load(f)
        resoltuion_values.append(jsondata['Resolution'])
        f.close()


resoltuion_values =  np.array(resoltuion_values)
unique_resolutions, frequency = np.unique(resoltuion_values, return_counts=True) 
print("Unique Resolution : " , unique_resolutions)
print("Frequency Count : ", frequency)

plt.bar(unique_resolutions,frequency) 
plt.title("unique_resolutions vs frequency Plot") 
plt.xticks(unique_resolutions, fontsize=10)
plt.xlabel('Unique Resolutions', fontsize=10)
plt.ylabel('Frequency', fontsize=10)
plt.show()

Ouput of this code is a bar plot. 希望这有帮助。请随意询问任何问题。在

相关问题 更多 >