EGYADMIN commited on
Commit
256d3b6
·
verified ·
1 Parent(s): 50ff0ce

Delete modules/utils/arabic_charts_optimized.py

Browse files
modules/utils/arabic_charts_optimized.py DELETED
@@ -1,374 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- وحدة تحسين عرض النصوص العربية في الرسوم البيانية
4
-
5
- هذا الملف يحتوي على دوال مساعدة لتحسين عرض النصوص العربية في الرسوم البيانية
6
- باستخدام مكتبات arabic-reshaper و python-bidi مع خطوط عربية احترافية.
7
- """
8
-
9
- import arabic_reshaper
10
- from bidi.algorithm import get_display
11
- import matplotlib.pyplot as plt
12
- import matplotlib.font_manager as fm
13
- import plotly.graph_objects as go
14
- import plotly.express as px
15
- import numpy as np
16
- import os
17
- import sys
18
- from arabic_font_config import ArabicFontManager, get_display_arabic, setup_arabic_fonts
19
-
20
- # الحصول على أفضل خط عربي متاح
21
- font_manager = ArabicFontManager()
22
- BEST_ARABIC_FONT = font_manager.get_best_font()
23
-
24
- def create_risk_matrix_plotly(risk_levels=None, width=450, height=450, font_family=BEST_ARABIC_FONT):
25
- """
26
- إنشاء مصفوفة المخاطر باستخدام Plotly مع دعم اللغة العربية
27
-
28
- المعلمات:
29
- risk_levels: مصفوفة مستويات المخاطر (اختياري)
30
- width: عرض الرسم البياني
31
- height: ارتفاع الرسم البياني
32
- font_family: عائلة الخط المستخدمة
33
-
34
- العوائد:
35
- كائن الرسم البياني Plotly Figure
36
- """
37
- # بيانات مصفوفة المخاطر الافتراضية إذا لم يتم توفيرها
38
- if risk_levels is None:
39
- risk_levels = np.array([
40
- [1, 2, 3],
41
- [2, 4, 6],
42
- [3, 6, 9]
43
- ])
44
-
45
- # إنشاء مصفوفة المخاطر باستخدام Plotly
46
- fig = go.Figure()
47
-
48
- # تحديد الألوان
49
- colorscale = [
50
- [0, '#1a9850'], # أخضر داكن (مخاطر منخفضة)
51
- [0.3, '#91cf60'], # أخضر فاتح
52
- [0.5, '#ffffbf'], # أصفر
53
- [0.7, '#fc8d59'], # برتقالي
54
- [1, '#d73027'] # أحمر (مخاطر عالية)
55
- ]
56
-
57
- # إنشاء مصفوفة المخاطر
58
- fig.add_trace(go.Heatmap(
59
- z=risk_levels,
60
- x=[get_display_arabic('منخفض'), get_display_arabic('متوسط'), get_display_arabic('عالي')],
61
- y=[get_display_arabic('منخفضة'), get_display_arabic('متوسطة'), get_display_arabic('عالية')],
62
- text=risk_levels,
63
- texttemplate="%{text}",
64
- textfont={"size":20},
65
- colorscale=colorscale,
66
- showscale=True,
67
- colorbar=dict(
68
- title=get_display_arabic("درجة الخطورة"),
69
- tickfont=dict(size=12),
70
- )
71
- ))
72
-
73
- # تخصيص الرسم البياني
74
- fig.update_layout(
75
- title=get_display_arabic("مصفوفة المخاطر"),
76
- height=height,
77
- width=width,
78
- margin=dict(l=50, r=50, t=50, b=50),
79
- xaxis=dict(
80
- title=get_display_arabic("التأثير"),
81
- tickfont=dict(size=12),
82
- ),
83
- yaxis=dict(
84
- title=get_display_arabic("الاحتمالية"),
85
- tickfont=dict(size=12),
86
- ),
87
- font=dict(
88
- family=font_family,
89
- size=14
90
- )
91
- )
92
-
93
- return fig
94
-
95
- def create_pie_chart_plotly(labels, values, title="توزيع البيانات", width=400, height=380, font_family=BEST_ARABIC_FONT):
96
- """
97
- إنشاء مخطط دائري باستخدام Plotly مع دعم اللغة العربية
98
-
99
- المعلمات:
100
- labels: تسميات البيانات
101
- values: قيم البيانات
102
- title: عنوان الرسم البياني
103
- width: عرض الرسم البياني
104
- height: ارتفاع الرسم البياني
105
- font_family: عائلة الخط المستخدمة
106
-
107
- العوائد:
108
- كائن الرسم البياني Plotly Figure
109
- """
110
- # تحويل التسميات إلى العرض الصحيح للعربية
111
- arabic_labels = [get_display_arabic(label) for label in labels]
112
-
113
- # إنشاء المخطط الدائري
114
- fig = go.Figure()
115
-
116
- # تحديد الألوان
117
- colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b']
118
-
119
- fig.add_trace(go.Pie(
120
- labels=arabic_labels,
121
- values=values,
122
- textinfo='percent',
123
- insidetextorientation='radial',
124
- marker=dict(colors=colors[:len(labels)]),
125
- hole=0.4,
126
- textfont=dict(
127
- family=font_family,
128
- size=14
129
- )
130
- ))
131
-
132
- # تخصيص الرسم البياني
133
- fig.update_layout(
134
- title=get_display_arabic(title),
135
- height=height,
136
- width=width,
137
- margin=dict(l=0, r=0, t=40, b=0),
138
- font=dict(
139
- family=font_family,
140
- size=14
141
- ),
142
- legend=dict(
143
- orientation="h",
144
- yanchor="bottom",
145
- y=-0.2,
146
- xanchor="center",
147
- x=0.5,
148
- font=dict(
149
- family=font_family,
150
- size=12
151
- )
152
- )
153
- )
154
-
155
- return fig
156
-
157
- def create_bar_chart_plotly(x_data, y_data, x_title="الفئات", y_title="القيم", title="رسم بياني شريطي", width=450, height=400, font_family=BEST_ARABIC_FONT):
158
- """
159
- إنشاء رسم بياني شريطي باستخدام Plotly مع دعم اللغة العربية
160
-
161
- المعلمات:
162
- x_data: بيانات المحور الأفقي
163
- y_data: بيانات المحور الرأسي
164
- x_title: عنوان المحور الأفقي
165
- y_title: عنوان المحور الرأسي
166
- title: عنوان الرسم البياني
167
- width: عرض الرسم البياني
168
- height: ارتفاع الرسم البياني
169
- font_family: عائلة الخط المستخدمة
170
-
171
- العوائد:
172
- كائن الرسم البياني Plotly Figure
173
- """
174
- # تحويل بيانات المحور الأفقي إلى العرض الصحيح للعربية إذا كانت نصية
175
- if isinstance(x_data[0], str):
176
- x_data = [get_display_arabic(x) for x in x_data]
177
-
178
- # إنشاء الرسم البياني الشريطي
179
- fig = go.Figure()
180
-
181
- fig.add_trace(go.Bar(
182
- x=x_data,
183
- y=y_data,
184
- marker_color='#1f77b4',
185
- text=y_data,
186
- textposition='auto',
187
- textfont=dict(
188
- family=font_family,
189
- size=12
190
- )
191
- ))
192
-
193
- # تخصيص الرسم البياني
194
- fig.update_layout(
195
- title=get_display_arabic(title),
196
- height=height,
197
- width=width,
198
- margin=dict(l=50, r=50, t=50, b=50),
199
- xaxis=dict(
200
- title=get_display_arabic(x_title),
201
- tickfont=dict(
202
- family=font_family,
203
- size=12
204
- ),
205
- ),
206
- yaxis=dict(
207
- title=get_display_arabic(y_title),
208
- tickfont=dict(
209
- family=font_family,
210
- size=12
211
- ),
212
- ),
213
- font=dict(
214
- family=font_family,
215
- size=14
216
- )
217
- )
218
-
219
- return fig
220
-
221
- def create_line_chart_plotly(x_data, y_data, x_title="الزمن", y_title="القيم", title="رسم بياني خطي", width=450, height=400, font_family=BEST_ARABIC_FONT):
222
- """
223
- إنشاء رسم بياني خطي باستخدام Plotly مع دعم اللغة العربية
224
-
225
- المعلمات:
226
- x_data: بيانات المحور الأفقي
227
- y_data: بيانات المحور الرأسي
228
- x_title: عنوان المحور الأفقي
229
- y_title: عنوان المحور الرأسي
230
- title: عنوان الرسم البياني
231
- width: عرض الرسم البياني
232
- height: ارتفاع الرسم البياني
233
- font_family: عائلة الخط المستخدمة
234
-
235
- العوائد:
236
- كائن الرسم البياني Plotly Figure
237
- """
238
- # تحويل بيانات المحور الأفقي إلى العرض الصحيح للعربية إذا كانت نصية
239
- if isinstance(x_data[0], str):
240
- x_data = [get_display_arabic(x) for x in x_data]
241
-
242
- # إنشاء الرسم البياني الخطي
243
- fig = go.Figure()
244
-
245
- fig.add_trace(go.Scatter(
246
- x=x_data,
247
- y=y_data,
248
- mode='lines+markers',
249
- marker=dict(size=8),
250
- line=dict(width=2)
251
- ))
252
-
253
- # تخصيص الرسم البياني
254
- fig.update_layout(
255
- title=get_display_arabic(title),
256
- height=height,
257
- width=width,
258
- margin=dict(l=50, r=50, t=50, b=50),
259
- xaxis=dict(
260
- title=get_display_arabic(x_title),
261
- tickfont=dict(
262
- family=font_family,
263
- size=12
264
- ),
265
- ),
266
- yaxis=dict(
267
- title=get_display_arabic(y_title),
268
- tickfont=dict(
269
- family=font_family,
270
- size=12
271
- ),
272
- ),
273
- font=dict(
274
- family=font_family,
275
- size=14
276
- )
277
- )
278
-
279
- return fig
280
-
281
- def create_risk_matrix_matplotlib(risk_levels=None, figsize=(6, 5), font_family=BEST_ARABIC_FONT):
282
- """
283
- إنشاء مصفوفة المخاطر باستخدام Matplotlib مع دعم اللغة العربية
284
-
285
- المعلمات:
286
- risk_levels: مصفوفة مستويات المخاطر (اختياري)
287
- figsize: حجم الشكل (العرض، الارتفاع) بالإنش
288
- font_family: عائلة الخط المستخدمة
289
-
290
- العوائد:
291
- كائن الرسم البياني Matplotlib Figure
292
- """
293
- # إعداد الخطوط العربية
294
- setup_arabic_fonts(font_family)
295
-
296
- # بيانات مصفوفة المخاطر الافتراضية إذا لم يتم توفيرها
297
- if risk_levels is None:
298
- risk_levels = np.array([
299
- [1, 2, 3],
300
- [2, 4, 6],
301
- [3, 6, 9]
302
- ])
303
-
304
- # إنشاء الشكل والمحاور
305
- fig, ax = plt.subplots(figsize=figsize)
306
-
307
- # تحديد الألوان
308
- cmap = plt.cm.get_cmap('RdYlGn_r')
309
-
310
- # إنشاء مصفوفة المخاطر
311
- im = ax.imshow(risk_levels, cmap=cmap)
312
-
313
- # إضافة النصوص إلى الخلايا
314
- for i in range(len(risk_levels)):
315
- for j in range(len(risk_levels[0])):
316
- ax.text(j, i, risk_levels[i, j], ha='center', va='center', color='white', fontsize=14, fontfamily=font_family)
317
-
318
- # تعيين العناوين والتسميات
319
- ax.set_title(get_display_arabic("مصفوفة المخاطر"), fontsize=16, fontfamily=font_family)
320
- ax.set_xlabel(get_display_arabic("التأثير"), fontsize=14, fontfamily=font_family)
321
- ax.set_ylabel(get_display_arabic("الاحتمالية"), fontsize=14, fontfamily=font_family)
322
-
323
- # تعيين تسميات المحاور
324
- ax.set_xticks(np.arange(len(risk_levels[0])))
325
- ax.set_yticks(np.arange(len(risk_levels)))
326
- ax.set_xticklabels([get_display_arabic(label) for label in ['منخفض', 'متوسط', 'عالي']], fontfamily=font_family)
327
- ax.set_yticklabels([get_display_arabic(label) for label in ['منخفضة', 'متوسطة', 'عالية']], fontfamily=font_family)
328
-
329
- # إضافة شريط الألوان
330
- cbar = fig.colorbar(im)
331
- cbar.set_label(get_display_arabic("درجة الخطورة"), fontsize=14, fontfamily=font_family)
332
-
333
- # تنسيق الشكل
334
- plt.tight_layout()
335
-
336
- return fig
337
-
338
- # اختبار الدوال إذا تم تشغيل الملف مباشرة
339
- if __name__ == "__main__":
340
- # طباعة الخط العربي المستخدم
341
- print(f"الخط العربي المستخدم: {BEST_ARABIC_FONT}")
342
-
343
- # اختبار مصفوفة المخاطر باستخدام Plotly
344
- risk_matrix = create_risk_matrix_plotly()
345
- risk_matrix.write_image("risk_matrix_optimized.png")
346
- print("تم إنشاء مصفوفة المخاطر باستخدام Plotly")
347
-
348
- # اختبار المخطط الدائري باستخدام Plotly
349
- labels = ["المنتجات المحلية", "الخدمات المحلية", "القوى العاملة المحلية", "غير محلي"]
350
- values = [40, 20, 30, 10]
351
- pie_chart = create_pie_chart_plotly(labels, values, "توزيع المحتوى المحلي")
352
- pie_chart.write_image("pie_chart_optimized.png")
353
- print("تم إنشاء المخطط الدائري باستخدام Plotly")
354
-
355
- # اختبار الرسم البياني الشريطي باستخدام Plotly
356
- x_data = ["الربع الأول", "الربع الثاني", "الربع الثالث", "الربع الرابع"]
357
- y_data = [20, 35, 25, 40]
358
- bar_chart = create_bar_chart_plotly(x_data, y_data, "الفترة", "المبيعات", "مبيعات السنة")
359
- bar_chart.write_image("bar_chart_optimized.png")
360
- print("تم إنشاء الرسم البياني الشريطي باستخدام Plotly")
361
-
362
- # اختبار الرسم البياني الخطي باستخدام Plotly
363
- x_data = ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو"]
364
- y_data = [10, 15, 13, 17, 20, 25]
365
- line_chart = create_line_chart_plotly(x_data, y_data, "الشهر", "الإيرادات", "إيرادات النصف الأول")
366
- line_chart.write_image("line_chart_optimized.png")
367
- print("تم إنشاء الرسم البياني الخطي باستخدام Plotly")
368
-
369
- # اختبار مصفوفة المخاطر باستخدام Matplotlib
370
- risk_matrix_mpl = create_risk_matrix_matplotlib()
371
- plt.savefig("risk_matrix_matplotlib_optimized.png", dpi=150)
372
- print("تم إنشاء مصفوفة المخاطر باستخدام Matplotlib")
373
-
374
- print("تم إنشاء جميع الرسوم البيانية بنجاح!")