Advertisement
Pavel_Kim

Всядомашка.ру V1.1F

Jun 24th, 2019
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 13.58 KB | None | 0 0
  1. #%matplotlib inline
  2. #VERSION 1.1 Final
  3. #-Убран костыль т.к. он не нужен(см. ниже)
  4. #-Теперь числа в задании 2 извлекаются корректно
  5. #-В 5-м графике добавлена покраска в чёрный
  6.  
  7. import os
  8. import matplotlib.pyplot as plt
  9. import numpy as np
  10.  
  11. def save(name='', fmt='png'):
  12.     pwd = os.getcwd()
  13.     iPath = '/home/pavel/{}'.format(fmt)
  14.     if not os.path.exists(iPath):
  15.         os.mkdir(iPath)
  16.     os.chdir(iPath)
  17.     plt.savefig('{}.{}'.format(name, fmt), fmt='png')
  18.     os.chdir(pwd)
  19.     #plt.close()
  20.  
  21.  
  22. #############################################################################
  23. ########Здесь будут объявляться все переменные, указанные в заданиях#########
  24. #############################################################################
  25.  
  26. #Задание 1 - картинка с подписью
  27.  
  28. from PIL import Image
  29. file1 = Image.open('/home/pavel/Загрузки/1.jpg')#Путь картинки
  30. text_1 = "Cyberbunk 2019"#Текст заголовка
  31.  
  32.  
  33. ################Задание 2 - стандартный график Python с заливкой###############
  34. import re
  35. pathtotask2 = "/home/pavel/Загрузки/file_date.txt"#Переменная, содержащая путь к файлу
  36. var = 13 #Номер выполняемого варианта
  37. file2 = open(pathtotask2,'r')
  38. i=0
  39. abc_2 = []#Массив точек абсцисс 2 задания(нет но да)
  40. val_ar_2 = []#Значения графика 2 задания
  41. head_text_2 = "Стандартный график"#Заголовок графика 2 задания
  42. head_font_2 = "Tahoma"#Шрифт, размер заголовка графика 2 задания
  43. head_size_2 = 14
  44. head_weight_2 = 'bold'
  45. head_style_2 = 'normal'#Жирность и стиль:'bold', 'normal'
  46.  
  47. text_font_2 = "Tahoma"#Шрифт, размер, поворот подписей делений осей координат
  48. text_size_2 = 12
  49. text_deg_turn_2 = 30
  50. text_weight_2 = 'bold'
  51. fill_color_21='grey'#Заливка, цвет над графиком
  52. #fill_color_22='red'#Заливка под графиком(опционально)
  53. background_color_2='yellow'#Фон диаграммы Цвет любой;задание цвета -любое
  54.  
  55. #Обработка данных
  56. for line in file2:#Извлечение данных
  57.     i+= 1
  58.     if(i == 1):
  59.         abc_2 = re.findall(r'\d+', line)
  60.  
  61.     if(i== var+1):
  62.         val_ar_2 = re.findall(r"[-+]?\d+\.\d+", line)
  63.  
  64. #Но это ещё не всё, все значения хранятся в виде строк, их НЕОБХОДИМО преобра-
  65. #вать в численные
  66. abc_2=np.array(abc_2,int)
  67. val_ar_2 = np.array(val_ar_2,float)
  68. #Опциональная часть для тех, у кого есть значения ниже нуля(Может вылезти
  69. #за границы если будут подряд два значения >0 и <0
  70. #bz_val_ar=[]#Массив для заливания под Ох
  71. #
  72. #for y in val_ar_2:#Создаёт массив только отрицательных значений
  73. #   if(int(y)>0): y = 0
  74. #   bz_val_ar.append(y)
  75. #bz_val_ar = np.array(bz_val_ar,int)
  76. #ax2.fill_between(abc_2,bz_val_ar,0,color = fill_color_22)#Этим методом
  77. #Осуществляется заливка
  78.  
  79. ################Задание 3 - столбчатая диаграмма с аннотацией##############
  80. import re
  81. pathtotask3 = "/home/pavel/Загрузки/fig8.txt"#Переменная, содержащая путь к файлу
  82. var = 13 #Номер выполняемого варианта
  83. file3 = open(pathtotask3,'r')
  84. i=0
  85. abc_30=0#Нулевая точка абсцисс 3 задания
  86. abc_31=0#Конечная точка абсцисс 3 задания
  87. val_ar_3 = []#Значения графика 3 задания
  88.  
  89. fill_color_3 = 'black'#Заливка любая, цвет любой
  90. arrow_color = '#AAAAAA'#Стрелка Цвет любой;способ задания –HEX
  91. arrow_end_x = 280 #Координаты начала и указателя стрелки
  92. arrow_end_y = 25 #
  93. arrow_head_x =288.6#
  94. arrow_head_y = 31#
  95. arrow_width = 0.5#Ширина стрелки
  96.  
  97. text_3 = "Максимум"#Текст
  98. text_font_3 = "Courier"#Шрифт текста на поле графика 3 задания
  99. text_size_3 = "16"
  100. text_weight_3 = 'light'#Жирность и стиль:'light', 'normal'
  101. text_style_3 = 'normal'
  102. text_color_3 = "#abcdeff0" #Цвет текста
  103. text_x_3 = arrow_end_x-len(text_3)#Координата х
  104. text_y_3=  arrow_end_y-2#Координата y(можно поменять на просто число)
  105.  
  106. background_color_3 = 'brown'#Фон диаграммы Цвет любой;задание цвета -любое
  107. for line in file3:
  108.     i+= 1
  109.     if(i == 2*var - 1):
  110.         values = re.findall(r'\d+', line)
  111.         abc_30 = values[0]
  112.         abc_31 = values[1]
  113.     if(i== 2*var):
  114.         val_ar_3 = re.findall(r'\d+', line)
  115. abc_3 = np.arange(int(abc_30),int(abc_31)+1,1)
  116. val_ar_3=np.array(val_ar_3,int)
  117. ######################Задание 4 - график функций с легендой####################
  118. import math
  119. abc_4 = np.arange(-1.0*math.pi,math.pi/2, math.pi/120)#Создание массива координат х
  120. val_ar_4_1 = []#Массив значений y1
  121. y2_k = -0.12 #Коэффициент функции y2
  122. polynom_sq = [-1.8, -1, -0.13, -0.5, 1.9]#Корни полинома
  123. val_ar_4_2=[]#Массив значений y2
  124. y1_color = 'cyan'#Цвет первого графика
  125. y2_color = 'magenta'#Цвет второго графика
  126. legend_font = "Times New Roman"#Данные легенды:шрифт, цвет, размер, жирность, стиль и цвет
  127. legend_size = 16
  128. legend_weight = 'light'
  129. legend_style = 'normal'
  130. legend_color = 'green'
  131. legend_turn_ox = 15#Угол поворота значений Ох
  132. legend_text_1 = "sin(4x)-cos(6x)^2"#Текст легенды 1 и 2 графика
  133. legend_text_2 = "Полином с k = 0.12"
  134. #Обработка
  135. legend_props = {#Без него не передать инфу о шрифте в легенду
  136.     'family':legend_font,
  137.     'size':legend_size,
  138.     'weight':legend_weight,
  139.     'style':legend_style,
  140. }
  141. for x in abc_4:
  142.     val_ar_4_1.append(math.sin(x*4.0) - math.cos(x*6.0)**2)#Задание массива значений 1 функции
  143. val_ar_4_1 = np.array(val_ar_4_1,float)
  144.  
  145. k_array=np.poly(polynom_sq)#Массив коэфициентов уравнения y2
  146. for i in range(0,len(k_array)):#преобразуем на общий коэфициент
  147.     k_array[i]=k_array[i]*y2_k
  148. for x in abc_4:
  149.     sum=0
  150.     for k in range(0,len(k_array)):
  151.         sum+=k_array[k] * (x**(len(k_array)-k-1))
  152.  
  153.     val_ar_4_2.append(sum)
  154. val_ar_4_2 = np.array(val_ar_4_2,float)
  155.  
  156.  
  157. ####################Задание 5 -Диаграммы рассеяния#############################
  158. import scipy as sc
  159. pareto_alpha = 1 #Коэффициент для распр. Парето
  160. norm_myu = 3.0#Коэффициенты для нормального расп.
  161. norm_sigma = 2.0
  162. gamma_shape = 1.0#Коэффициенты для гамма расп.
  163. gamma_scale = 1.7
  164. ravn_min = 0#Коэффициенты для равномерного расп.
  165. ravn_max = 3
  166. pareto_color = 'red'#Цвета графиков распределений
  167. norm_color = [0,1,0]
  168. gamma_color = 'orange'
  169. ravn_color = '#0080FF'
  170. pareto_dotsize = 10;#размер точек распределений
  171. norm_dotsize = 3;
  172. gamma_dotsize = 2;
  173. ravn_dotsize = 1;
  174. abc_5_1 = np.arange(0.001,1,1/300)#Задаём абсциссу для 1 функции
  175. abc_5_2 = np.arange(1.001,2,1/300)
  176. abc_5_3 = np.arange(2.001,3,1/300)
  177. #Поиск значений
  178. #Распределение Парето
  179. #val_ar_5_pareto = np.random.pareto(abc_5)
  180. #for i in range(0,len(val_ar_5_pareto)):
  181. #   val_ar_5_pareto[i]*=pareto_alpha
  182. #Задаём нормальное распределение
  183. val_ar_5_normal = np.random.normal(norm_myu,norm_sigma,300)
  184. #Задаём гамма распределение
  185. val_ar_5_gamma = np.random.gamma(gamma_shape,gamma_scale,300)
  186. #Задаём равномерное распределение
  187. val_ar_5_ravn = np.random.uniform(ravn_min,ravn_max,300)
  188. #Задание 6 - График фигур Лиссажу с заливкой
  189. import math
  190. ampl_a = 6#Амплитуды А и В
  191. ampl_b = 15
  192. freq_a = 7.2#Частоты a и b
  193. freq_b = 6
  194. lis_sigma = math.pi/4#Cдвиг фаз
  195. lis_color = "#0000FF"#Цвет заливки
  196. lis_transparency = 0.2#Прозрачность(от 0 до 1
  197. lis_netline_color='#FF0000'# Цвет линий сетки
  198.  
  199. #Обработка
  200. abc_6 = []
  201. val_ar_6 =[]
  202. for i in range (0,1001):
  203.     abc_6.append(ampl_a * math.sin(math.pi*i/500 * freq_a + lis_sigma))
  204.     val_ar_6.append(ampl_b * math.sin(math.pi*i/500 * freq_b))
  205. abc_6 = np.array(abc_6,float)
  206. val_ar_6 = np.array(val_ar_6,float)
  207. #############################################################################
  208. #####################Конец объявления переменных#############################
  209. #############################################################################
  210.  
  211. import matplotlib as mpl
  212. import matplotlib.pyplot as plt
  213. import matplotlib.gridspec as gridspec
  214. import matplotlib.font_manager as fmg
  215.  
  216. fig = plt.figure()
  217. fig.set_size_inches(16,12)
  218. egrid = (2,3)#Создаём шесть областей для графиков 2х3
  219. ax1 = plt.subplot2grid(egrid, (0, 0))
  220. ax2 = plt.subplot2grid(egrid, (0, 1))
  221. ax3 = plt.subplot2grid(egrid, (0, 2))
  222. ax4 = plt.subplot2grid(egrid, (1, 0))
  223. ax5 = plt.subplot2grid(egrid, (1, 1))
  224. ax6 = plt.subplot2grid(egrid, (1, 2))
  225.  
  226. #Начало выполнения задания 1
  227. ax1.imshow(file1)#Вставка файла в график
  228. ax1.set_title(text_1)#Вставка заголовка
  229. ax1.axis('off')#Вырубаем оси
  230. #Конец выполнения задания 1
  231.  
  232. #Начало выполнения задания 2
  233. ax2.plot(abc_2,val_ar_2)#Ставим точки графика по знач. двух массивов
  234. plt.sca(ax2)#Переключаемся на оси 2 графика
  235. ax2.grid(True)#Включаем решетку графика
  236. ax2.set_xlabel('Время',fontsize = text_size_2,fontname=text_font_2)#Подпись оси х
  237. ax2.set_ylabel('Температура',fontsize = text_size_2,fontname = text_font_2)#оси y
  238. ax2.set_title(head_text_2,fontsize = head_size_2,fontname=head_font_2,#Заголовок
  239.               fontstyle=head_style_2,fontweight = head_weight_2)
  240. ax2.set_facecolor(background_color_2)
  241. plt.xticks(rotation=text_deg_turn_2)#Поворачиваем значения оси х
  242. plt.yticks(rotation=text_deg_turn_2)#Поворачиваем значения оси y
  243.  
  244. ax2.fill_between(abc_2,0,val_ar_2,color = fill_color_21)#Заливка над Ох
  245. ax2.set_title("Стандартный график с заливкой")
  246. #Конец задания 2
  247.  
  248. #Начало задания 3
  249. ax3.bar(abc_3, val_ar_3,color=fill_color_3)#Создание столбцов диаграммы
  250. ax3.grid(which = 'major',axis = 'both')#Создание сетки на диаграмме
  251. ax3.arrow(arrow_end_x,arrow_end_y,arrow_head_x-arrow_end_x,
  252.           arrow_head_y-arrow_end_y,color = arrow_color,width = arrow_width,
  253.           length_includes_head=True)#Создание стрелки
  254. ax3.text(text_x_3, text_y_3, text_3, fontname = text_font_3,#Пишем текст
  255.          fontsize = text_size_3, fontstyle = text_style_3,
  256.          fontweight = text_weight_3,color = text_color_3)#
  257. ax3.set_facecolor(background_color_3)#Задаём цвет фона
  258. ax3.set_title("Диаграмма с аннотацией")
  259. #Конец задания 3
  260.  
  261. #Начало задания 4
  262. p1, =ax4.plot(abc_4,val_ar_4_1,color = y1_color)#Рисуем графики по массивам
  263. p2, =ax4.plot(abc_4,val_ar_4_2,color = y2_color)
  264.  
  265. l = ax4.legend([p1,p2],[legend_text_1,legend_text_2],prop=legend_props,loc = 0)#Создаём легенду
  266. for text in l.get_texts():#ЗАДАЁМ ЦВЕТ ТАК ПОТОМУ ЧТО ПО НОРМАЛЬНОМУ НЕЛЬЗЯ
  267.     text.set_color(legend_color)
  268. plt.sca(ax4)#Переключаемся на 4 подграфик для поворота осей
  269.  
  270. plt.xticks(rotation=legend_turn_ox)#Поворачиваем оси
  271. ax4.grid(True)#Включаем решётку
  272. ax4.set_title("График с легендой")
  273. #Конец 4 задания
  274.  
  275. #Начало задания 5
  276. #ax5.plot(abc_5(Заменить на нужное),val_ar_5_pareto, '.',linewidth = pareto_dotsize, color = pareto_color)#Рисуем распределение Парето
  277. ax5.scatter(abc_5_1,val_ar_5_normal, norm_dotsize,norm_color)#Рисуем нормальное распределение
  278. ax5.scatter(abc_5_2,val_ar_5_gamma,gamma_dotsize,#Рисуем гамма распределение
  279.          color = gamma_color)
  280. ax5.scatter(abc_5_3,val_ar_5_ravn,ravn_dotsize,ravn_color)#Рисуем равномерное распределение
  281. ax5.grid(True)
  282. ax5.set_facecolor("#000000")  # Задаём цвет фона
  283. ax5.set_title("Диаграмма рассеяния")
  284. #Конец задания 5
  285.  
  286. #Начало задания 6
  287. ax6.plot(abc_6,val_ar_6)#Построение графика
  288. ax6.fill_between(abc_6,val_ar_6, color = lis_color,alpha = lis_transparency)#Заливка фигуры
  289. ax6.grid(color = lis_netline_color)
  290. ax6.set_title("Фигуры Лиссажу")
  291. #Конец задания 6
  292. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement