Как отображать только первые n символов тиков оси X? [Дубликат]

Как объяснил scompt.com , запрос может завершиться ошибкой. Используйте этот код, чтобы получить ошибку запроса или правильный результат:

$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query("
SELECT * FROM Users 
WHERE UserName LIKE '".mysql_real_escape_string($username)."'
");

if($result)
{
    while($row = mysql_fetch_array($result))
    {
        echo $row['FirstName'];
    }
} else {
    echo 'Invalid query: ' . mysql_error() . "\n";
    echo 'Whole query: ' . $query; 
}

Для получения дополнительной информации см. Документацию для mysql_query() .

Фактической ошибкой были одиночные кавычки, так что переменная $username не анализировалась. Но вы действительно должны использовать mysql_real_escape_string($username), чтобы избежать инъекций SQL.

136
задан Will Vousden 16 November 2015 в 18:07
поделиться

7 ответов

Предостережение: если метки метки уже установлены в строку (как это обычно бывает в случае, например, в коробке), это не будет работать с любой версией matplotlib более новой, чем 1.1.0. Если вы работаете с текущим мастером github, это не сработает. Я не уверен, что проблема еще ... Это может быть непреднамеренное изменение, или это может быть не так ...

Обычно вы делаете что-то в этом направлении:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

# We need to draw the canvas, otherwise the labels won't be positioned and 
# won't have values yet.
fig.canvas.draw()

labels = [item.get_text() for item in ax.get_xticklabels()]
labels[1] = 'Testing'

ax.set_xticklabels(labels)

plt.show()

enter image description here [/g0]

Чтобы понять причину, по которой вам нужно перепрыгнуть через столько обручей, вам нужно понять немного больше о том, как структурируется matplotlib.

Matplotlib намеренно избегает выполнения «статического» позиционирования тиков и т. д., если это явно не сказано. Предполагается, что вы захотите взаимодействовать с сюжетом, и поэтому границы сюжета, галочки, метки и т. Д. Будут динамически меняться.

Поэтому вы не можете просто установить текст данный тиковый ярлык.

Однако, если Locators и Formatters установлены как статические (FixedLocator и FixedFormatter, соответственно), то по умолчанию они устанавливаются локатором и форматированием оси каждый раз, , то метки тика остаются неизменными.

Это то, что делает set_*ticklabels или ax.*axis.set_ticklabels.

Надеюсь, это значительно облегчит понимание того, почему изменение индивидуальной метки метки немного запутанно.

Часто то, что вы на самом деле хотите сделать, это просто аннотировать определенную позицию. В этом случае загляните в annotate.

188
ответ дан Joel Ostblom 1 September 2018 в 03:37
поделиться

В новых версиях matplotlib, если вы не устанавливаете метки тика с кучей значений str, они по умолчанию '' (и когда график рисуется, метки являются просто значениями тиков) , Зная, что для получения желаемого результата потребуется что-то вроде этого:

>>> from pylab import *
>>> axes = figure().add_subplot(111)
>>> a=axes.get_xticks().tolist()
>>> a[1]='change'
>>> axes.set_xticklabels(a)
[<matplotlib.text.Text object at 0x539aa50>, <matplotlib.text.Text object at 0x53a0c90>, 
<matplotlib.text.Text object at 0x53a73d0>, <matplotlib.text.Text object at 0x53a7a50>, 
<matplotlib.text.Text object at 0x53aa110>, <matplotlib.text.Text object at 0x53aa790>]
>>> plt.show()

и результат: enter image description here [/g0]

, и теперь, если вы проверите _xticklabels, они больше не являются связкой ''.

>>> [item.get_text() for item in axes.get_xticklabels()]
['0.0', 'change', '1.0', '1.5', '2.0']

Он работает в версиях от 1.1.1rc1 до текущей версии 2.0.

71
ответ дан CT Zhu 1 September 2018 в 03:37
поделиться

вы можете сделать:

for k in ax.get_xmajorticklabels():
    if some-condition:
        k.set_color(any_colour_you_like)

draw()
-4
ответ дан Hachi Manzur 1 September 2018 в 03:37
поделиться

Прошло некоторое время с тех пор, как был задан этот вопрос. На сегодняшний день (matplotlib 2.2.2), и после некоторых чтений и испытаний я считаю, что лучший / правильный способ:

Matplotlib имеет модуль с именем ticker , что "содержит классы для поддержки полностью настраиваемого определения и форматирования тика" . Чтобы изменить конкретный тик на графике, для меня работает следующее:

import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import numpy as np 

def update_ticks(x, pos):
    if x == 0:
        return 'Mean'
    elif pos == 6:
        return 'pos is 6'
    else:
        return x

data = np.random.normal(0, 1, 1000)
fig, ax = plt.subplots()
ax.hist(data, bins=25, edgecolor='black')
ax.xaxis.set_major_formatter(mticker.FuncFormatter(update_ticks))
plt.show()

Предостережение! x - значение галочки, а pos - его относительное положение по порядку по оси. Обратите внимание, что pos принимает значения, начиная с 1, а не в 0, как обычно, при индексировании.


В моем случае я пытался отформатировать y-axis гистограммы с процентные значения. mticker имеет другой класс с именем PercentFormatter, который может сделать это легко, без необходимости определять отдельную функцию по-прежнему:

import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import numpy as np 

data = np.random.normal(0, 1, 1000)
fig, ax = plt.subplots()
weights = np.ones_like(data) / len(data)
ax.hist(data, bins=25, weights=weights, edgecolor='black')
ax.yaxis.set_major_formatter(mticker.PercentFormatter(xmax=1.0, decimals=1))
plt.show()

В этом случае xmax - это значение данных, которое соответствует 100%. Проценты вычисляются как x / xmax * 100, поэтому мы исправим xmax=1.0. Кроме того, decimals - количество знаков после запятой после точки.

1
ответ дан iipr 1 September 2018 в 03:37
поделиться

Можно также сделать это с помощью pylab и xticks

import pylab as plt
x = [0,1,2]
y = [90,40,65]
labels = ['high', 'low', 37337]
plt.plot(x,y, 'r')
plt.xticks(x, labels, rotation='vertical')
plt.show()

http://matplotlib.org/examples/ticks_and_spines /ticklabels_demo_rotation.html

60
ответ дан rafaelvalle 1 September 2018 в 03:37
поделиться

Это работает:

import matplotlib.pyplot as plt

fig, ax1 = plt.subplots(1,1)

x1 = [0,1,2,3]
squad = ['Fultz','Embiid','Dario','Simmons']

ax1.set_xticks(x1)
ax1.set_xticklabels(squad, minor=False, rotation=45)

1
ответ дан Soham 1 September 2018 в 03:37
поделиться

Класс axes имеет функцию set_yticklabels , которая позволяет вам устанавливать метки меток следующим образом:

#ax is the axes instance
group_labels = ['control', 'cold treatment',
             'hot treatment', 'another treatment',
             'the last one']

ax.set_xticklabels(group_labels)

Я все еще работаю над тем, почему ваш пример выше не был Не работай.

10
ответ дан stanri 1 September 2018 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: