SHARE
TWEET

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

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