• 2022-08-20


    1.dataframe用时间分组细节,如果索引是时间类型,那么,可以用下面的代码指定分组的时间段

    agg_10m = df.groupby(pd.TimeGrouper(freq='10Min')).aggregate(numpy.sum)

    这样的话就不用再自己处理索引数据了。

    2.今天又搜了一下画动态图的库,我想展示动态图,把数据“播放”出来,plotly.express是支持动态图的,但是有很多限制,而且只绘制当前状态,总之看起来很奇怪,另一个是pandas_alive,但是因为库版本冲突没有安装成功。它展示的是短视频里看到的那种条形图的排名,然后有那种过渡动画的那种,以后再研究。第三个是matplotlib,这个成熟的绘图库功能还是很强大的。其实bokeh也是支持的,之前看过文档,但是没有做实验。还有一个就是pyecharts,看效果还行,但不是我想要的。

    1. import plotly.express as px
    2. import numpy as np
    3. from datetime import datetime
    4. import time
    5. from pandas.core import resample as rp
    6. def convert_time(df,d):
    7. try:
    8. date_str = d + " 00:00:00"
    9. struct_time = time.strptime(date_str, '%Y-%m-%d %H:%M:%S')
    10. timesamp = time.mktime(struct_time)
    11. res = timesamp + df
    12. d = datetime.fromtimestamp(res)
    13. year = d.year
    14. month = d.month
    15. day = d.day
    16. hour = d.hour
    17. minute = d.minute
    18. return str(datetime(year, month, day, hour, minute))
    19. except:
    20. return df
    21. df = MDF("C:\\Users\\gw00305123\\Desktop\\下载\\AnalysisTools\\A样耐久稳态工况_3th cycle_2022-06-24 11-05-13.MDF").to_dataframe()
    22. date_str = '2022-06-24'
    23. df['myindex'] = np.arange(0,df.shape[0])
    24. n_list = [
    25. 'sAPT12_CatIn_pAir_kPa',
    26. 'spABPV_CatIn_pAir_kPa',
    27. 'sABPG_ABPV_posVlv_perc',
    28. 'csABPV_posVlv_perc',
    29. 'sAFMM_AcIn_mdotAir_gps',
    30. 'spAC_CatIn_mdotAir_gps',
    31. 'FeedbackSpeed',
    32. 'csAC_nMotor_rpm',
    33. 'sFPT12_AnIn_pHy_kPa',
    34. 'spFIV_AnIn_pHy_kPa',
    35. 'csFIV_DutCy_perc',
    36. 'FRB_Speed',
    37. 'csFRB_Spd_rpm',
    38. 'sCTE12_StkIn_tClt_dC',
    39. 'sCTE21_StkOut_tClt_dC',
    40. 'sCWP_nMotor_rpm',
    41. 'sCPT21_StkOut_pClt_kPa',
    42. 'sFPT21_AnOut_pHy_kPa',
    43. 'sCPT12_StkIn_pClt_kPa',
    44. 'sCVM_uMeanCell_V',
    45. 'sCVM_uMinCell_V',
    46. 'sCVM_uMeanCell_V',
    47. 'sCVM_uMinCell_V',
    48. 'sPDU_StkOut_iSTK_A',
    49. 'myindex',
    50. ]
    51. df = df.loc[:,n_list]
    52. df.reset_index(inplace=True)
    53. if 'Time' not in df and 'timestamps' in df:
    54. df['Time'] = df['timestamps'].apply(convert_time,args=([date_str]))
    55. #df = df.set_index('Time')
    56. #group = df.groupby(rp.TimeGrouper(freq='10Min'))
    57. df = df.dropna()
    58. #df = df.iloc[10000:11000,:]
    59. px.bar(df, y='sFPT21_AnOut_pHy_kPa',animation_frame='Time',animation_group='Time',color='Time',range_x=[0,50000],range_y=[0,500])

    这个是我研究时的代码,画出的图很奇怪,还没能达到要求。

    matplotlib案例,案例原文Python实现动态排序图 Python编程实现超炫动态排序图(IT技术) (qb5200.com)

    1. # 导入库函数
    2. import random
    3. import pandas as pd
    4. import matplotlib.pyplot as plt
    5. import matplotlib.ticker as ticker
    6. import matplotlib.animation as animation
    7. from IPython.display import HTML
    8. import matplotlib
    9. #防止动漫内存太大,报错
    10. matplotlib.rcParams['animation.embed_limit'] = 2**128
    11. #pandas读取数据,且去列名分别为name,group,year和value的值;
    12. url = 'https://gist.githubusercontent.com/johnburnmurdoch/4199dbe55095c3e13de8d5b2e5e5307a/raw/fa018b25c24b7b5f47fd0568937ff6c04e384786/city_populations'
    13. df = pd.read_csv(url, usecols=['name', 'group', 'year', 'value'])
    14. df.head()
    15. #导入random函数,randomcolor用于生成颜色代码
    16. # randomcolor生成颜色代码原理,
    17. # 【1-9/A-F】15个数字随机组合成6位字符串前面再加上一个“#”号键
    18. import random
    19. def randomcolor():
    20. colorlist = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
    21. color =''
    22. for i in range(6):
    23. color += random.choice(colorlist)
    24. return '#'+ color
    25. #对地区列表进行去重,分类;
    26. area_list1 = set(df['name'])
    27. # color_list用于存放随机生成颜色代码个数
    28. # 因为后面区域个数 要与颜色个数保持一致,这里用了len函数;
    29. color_list =[]
    30. for i in range(len(area_list1)):
    31. str_1 = randomcolor()
    32. color_list.append(str_1)
    33. str_1 = randomcolor()
    34. #area_list转化为列表
    35. area_list_1 = [i for i in area_list1]
    36. print(color_list)
    37. print(area_list_1)
    38. #colors表示 所在城市:颜色 一一对应字典形式;
    39. colors =dict(zip(area_list_1,color_list))
    40. print(colors)
    41. #group_lk为 城市:所在区域 --对应字典形式;
    42. group_lk = df.set_index('name')['group'].to_dict()
    43. print(group_lk)
    44. # 用plt加理图表,figsize表示图标长宽,ax表示标签
    45. fig, ax = plt.subplots(figsize=(15, 8))
    46. #dras_barchart生成current_year这一年各城市人口基本情况;
    47. def draw_barchart(current_year):
    48. #dff对year==current_year的行,以value从升序方式排序,取后十名也就是最大值;
    49. dff = df[df['year'].eq(current_year)].sort_values(by='value',ascending = True).tail(12)
    50. # 所有坐标、标签清除
    51. ax.clear()
    52. #显示颜色、城市名字
    53. ax.barh(dff['name'],dff['value'],color = [colors[x] for x in dff['name']])
    54. dx = dff['value'].max()/200
    55. #ax.text(x,y,name,font,va,ha)
    56. # x,y表示位置;
    57. # name表示显示文本;
    58. # va,ba分别表示水平位置,垂直放置位置;
    59. for i ,(value,name) in enumerate(zip(dff['value'], dff['name'])):
    60. ax.text(value-dx,i,name,size=14,weight=600,ha ='right',va = 'bottom')
    61. ax.text(value-dx,i-.25,group_lk[name],size = 10,color ='#444444',ha ='right',va = 'baseline')
    62. ax.text(value+dx,i ,f'{value:,.0f}',size = 14,ha = 'left',va ='center')
    63. #ax.transAxes表示轴坐标系,(1,0.4)表示放置位置
    64. ax.text(1,0.4,current_year,transform = ax.transAxes,color ='#777777',size = 46,ha ='right',weight=800)
    65. ax.text(0,1.06,'Population (throusands)',transform = ax.transAxes,size=12,color='#777777')
    66. #set_major_formatter表示刻度尺格式;
    67. ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}'))
    68. ax.xaxis.set_ticks_position('top')
    69. ax.tick_params(axis='x',colors='#777777',labelsize=12)
    70. ax.set_yticks([])
    71. #margins表示自动缩放余额;
    72. ax.margins(0,0.01)
    73. # 设置后面的网格
    74. ax.grid(which='major',axis='x',linestyle='-')
    75. #刻度线和网格线是在图标上方还是下方,True为下方
    76. ax.set_axisbelow(True)
    77. ax.text(0,1.15,'The most population cities in the word from 1500 to 2018',
    78. transform=ax.transAxes,size=24,weight=600,ha='left',va='top')
    79. ax.text(1,0,'by@zeroing1',transform = ax.transAxes,color ='#777777',ha = 'right',
    80. bbox = dict(facecolor='white',alpha = 0.8,edgecolor='white'))
    81. #取消图表周围的方框显示
    82. plt.box(False)
    83. #绘制2018年各城市人口情况
    84. draw_barchart(2018)

  • 相关阅读:
    华为云云耀云服务器L实例评测|部署在线轻量级备忘录 memos
    使用 Alice inspector 和 Dio 进行 Flutter API 日志记录
    【第六部分 | JavaScript高级】3:正则表达式
    初级网络工程师之入门到入狱(一)
    学习python第二天(字符串内置函数)
    红队打靶:Fowsniff打靶思路详解(vulnhub)
    JavaScript高级 笔记
    ignite集群
    103.36.167.X在服务器删除、复制文件的时候会出现卡的情况,是什么原因?
    python编程自学心得和避坑经验
  • 原文地址:https://blog.csdn.net/zy1620454507/article/details/126441859